C#生成模10检验位

2021-08-18 22:58

阅读:856

标签:str   加拿大   维基百科   一起   ofo   table   tostring   安全   target   以下摘自维基百科 “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检验位标签:str   加拿大   维基百科   一起   ofo   table   tostring   安全   target   原文地址:http://www.cnblogs.com/onlyone0218/p/7462414.html


评论


亲,登录后才可以留言!