C#生成模10检验位

以下摘自维基百科 “ 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;在网上搜索了一圈,发现没人提到过)
原始数字7992739871x
偶数位乘2718947691672x
将数字相加7994769772=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;

        }

转载于:https://www.cnblogs.com/onlyone0218/p/7462414.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值