///
/// Input a KID number, and the return value is a mathematical
/// Mod 10 value of this KID.
///
/// KID to be evaluated
/// The Mod 10 Digit
///
/// KID: 0000001075000102004
/// Check Digit: 7
/// Math:
/// 0 0 0 0 0 0 1 0 7 5 0 0 0 1 0 2 0 0 4
/// 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
/// +0+0+0+0+0+0+2+0+5+5+0+0+0+1+0+2+0+0+8 = 23
/// The digits in the two lines are Multiplicated
/// ex: 7*2 = 14 = 1+4 = 5
/// ex: 1*2 = 2
/// If Sum Exeeds 9 digits are added ex: 14 = 1+4 = 5
/// Take 10 - last digit = 10-3=7
/// CheckDigit is then 7
///
public int GenerateLuhn(string sInput)
{
int length = sInput.Length;
int iLuhnKey;
int sum = 0;
int offset = length-1 % 2;
byte[] digits = new System.Text.ASCIIEncoding().GetBytes(sInput);
for (int i = 0; i < length; i++)
{
digits[i] -= 48;
if (((i + offset) % 2) == 0)
digits[i] *= 2;
sum += (digits[i] > 9) ? digits[i] - 9 : digits[i];
}
int iModulo = sum%10;
if(iModulo > 0)
iLuhnKey = 10 - iModulo;
else
iLuhnKey = 0;
return iLuhnKey;
}
|