1. 程式人生 > >C#生成模10檢驗位

C#生成模10檢驗位

攻擊 bsp .org else tostring return tar http 識別碼

以下摘自維基百科 “http://zh.wikipedia.org/wiki/Luhn%E7%AE%97%E6%B3%95” Luhn算法(Luhn algorithm),也稱為“模10”(Mod 10)算法,是一種簡單的校驗和算法,一般用於驗證身份識別碼,例如發卡行識別碼、國際移動設備辨識碼(IMEI),美國國家提供商標識號碼,或是加拿大社會保險號碼。。 該算法現已屬於公有領域並得到了廣泛的應用,它不是一種安全的加密哈希函數,設計它的目的只是防止意外出錯而不是惡意攻擊。 描述 Luhn算法會通過校驗碼對一串數字進行驗證,校驗碼通常會被加到這串數字的末尾處,從而得到一個完整的身份識別碼。 我們以數字“7992739871”為例,計算其校驗位: 1. 從校驗位開始,從右往左,偶數位乘2(例如,7*2=14),第0位也算作偶數位,然後將兩位數字的個位值與十位值相加(例如,10:1+0=1,14:1+4=5);
2. 把得到的數字加在一起(本例中得到67); 3. 將數字的和取模10(本例中得到7),再用10去減(本例中得到3),得到校驗位。 4.如果校驗位是10,則取0(其實就是數字和是10;在網上搜索了一圈,發現沒人提到過)
原始數字 7 9 9 2 7 3 9 8 7 1 x
偶數位乘2 7 18 9 4 7 6 9 16 7 2 x
將數字相加 7 9 9 4 7 6 9 7 7 2 =67

5.實現代碼

public static int GetLuhn(string str)

{

int n = 0;

int iLen = str.Length;

for (int j = iLen; j > 0; j--)

{

if ((iLen - j) % 2 == 0)//偶數位

{

int sNum = int.Parse(str[j - 1].ToString()) * 2;//偶數位乘以2

//十位數值+個位數值

string s = sNum.ToString();

int s1 = 0;

if (s.Length == 2)

s1 = int.Parse(s[0].ToString()) + int.Parse(s[1].ToString());

else

s1 = int.Parse(s[0].ToString());

n = n + s1;

}

else

{

n = n + int.Parse(str[j - 1].ToString());

}

}

n = 10 - (n % 10);

if (n == 10)

n = 0;

return n;

}

C#生成模10檢驗位