// Function: sanitize_line // Description: Returns a sanitized version of the line passed in. // Uses Functions: // Parameters: Line from an ACH file. // Pre-Conditions: string // Post-Conditions: string // Return: Sanitized version of line. public static string sanitize_line(string line) { StringBuilder sanitizedLine = new StringBuilder(line); // Deal with line as a stringbuilder for convenience. if (line[0] == '6') // Card numbers are only on lines that start with 6. { // Sanitize number. ulong number = UInt64.Parse(line.Substring(12, 16)); sanitizedLine.Remove(12, 16); sanitizedLine.Insert(12, (CardFunctions.get_sanitized_number(number)).ToString()); // Sanitize name. for (int i = 39; i < 78; i++) { sanitizedLine[i] = char_randomizer(sanitizedLine[i]); } } else if (line[0] == '5') { // Sanitize name. for (int i = 53; i < 68; i++) { sanitizedLine[i] = char_randomizer(sanitizedLine[i]); } } return(sanitizedLine.ToString()); }
// Function: get_sanitized_number // Description: Returns sanitized version of card number. // Uses Functions: get_corrected_number // Parameters: Number to be sanitized. // Pre-Conditions: Valid card number. // Post-Conditions: Number retains first 5 digits then is all zeros, except for the check digit at the end that will pass the Luhn Algorithm. // Return: Sanitized number. public static ulong get_sanitized_number(ulong num) { ulong returnNum = 0; int checkDigit = CardFunctions.get_last_digit(num); int[] digits = num.ToString().Select(Convert.ToInt32).ToArray(); // Convert num into array of digits. for (int i = 0; i < 5; i++) // Retain first 5 digits of the number, and zero the rest. { digits[i] -= 48; returnNum += Convert.ToUInt64(digits[i]) * Convert.ToUInt64(Math.Pow(10, digits.Length - i - 1)); } return(get_corrected_number(returnNum)); // Return number with the correct check digit at the end. }