首页
归档
友情链接
留言
更多
关于
动态
Search
1
[分享栈]centos7安装gcc10.2.0
7,077 阅读
2
[技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
6,701 阅读
3
[技术栈]C#利用Luhn算法(模10算法)对IMEI校验
6,314 阅读
4
[分享栈]esxi6.7虚拟机安装omv(openmediavault)教程
5,765 阅读
5
[分享栈]centos7安装python3.8.5
4,830 阅读
分享栈
技术栈
经验栈
登录
Search
标签搜索
C#
centos
winform
仪器
IPV4
IPV6
测速
crc
crc16
crc32
fcs
luhn
模10
算法
sql
gcc
python
紫光展锐
omv
openmediavault
武小栈
累计撰写
21
篇文章
累计收到
37
条评论
首页
栏目
分享栈
技术栈
经验栈
页面
归档
友情链接
留言
关于
动态
搜索到
1
篇与
的结果
2019-09-11
[技术栈]C#利用Luhn算法(模10算法)对IMEI校验
1、Luhn算法(模10算法)通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图:算法主要分为三步:第一步:从右边第一位(最低位)开始隔位乘2;第二步:把第一步所得的每一个数字加入到原来的数中,比如9*2=18,为1+8;第三步:用以0结尾且大于第二步所获得的数的和的最小整数减去第二步所获得的和即可以获得校验位,如70-67=3,3即为校验位,如果第二步所有数字的和以0结尾,比如30、40、50等,那么校验为0;2、IMEI校验IMEI码由GSM(Global System for Mobile Communications,全球移动通信协会)统一分配,授权BABT(British approvals Board of Telecommunications,英国通信认证管理委员会)审受。在TS.06 IMEI Allocation and Approval Process中规定IMEI校验应该通过Luhn算法计算,如下图所示:3、C#代码public class LuhnCalcCheckDigit { /// <summary> /// 通过Luhn算法计算校验位,适合IMEI、银行卡等 /// </summary> /// <param name="imei">不包含校验位的号码</param> /// <returns></returns> public static int CalcLuhnCheckDigit(string imei) { int checkDigit = 0; int addValue = 0; for (int i = 0; i < imei.Length; i++) { if (i % 2 == 0) { int result = Convert.ToInt32(imei[imei.Length - i - 1].ToString()) * 2; if (result > 9) { addValue += (result - 9); } else { addValue += result; } } else { addValue += Convert.ToInt32(imei[imei.Length - i - 1].ToString()); } } if (addValue % 10 == 0) { checkDigit = 0; } else { checkDigit = 10 - addValue % 10; } return checkDigit; } /// <summary> /// 通过Luhn算法核验号码是否合法,适合IMEI、银行卡等 /// </summary> /// <param name="imei">包含校验位的号码</param> /// <returns></returns> public static bool VerifyLuhn(string imei) { int checkDigit = 0; int addValue = 0; for (int i = 1; i < imei.Length; i++) { if (i % 2 == 1) { int result = Convert.ToInt32(imei[imei.Length - i - 1].ToString()) * 2; if (result > 9) { addValue += (result - 9); } else { addValue += result; } } else { addValue += Convert.ToInt32(imei[imei.Length - i - 1].ToString()); } } if (addValue % 10 == 0) { checkDigit = 0; } else { checkDigit = 10 - addValue % 10; } return (checkDigit - Convert.ToInt32(imei[imei.Length - 1].ToString())) == 0; } }4、参考资料链接TS.06 IMEI Allocation and Approval ProcessISO/IEC 7812-1:2017
2019年09月11日
6,314 阅读
1 评论
0 点赞