计算IMEI号的校验位

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

计算IMEI号的校验位

       移动设备国际识别码(IMEI:International Mobile Equipment Identification Number)是区别移动设备的标志,具有唯一性,贴在手机背面的标志上,并且储存在移动设备中,可用于监控被窃或无效的移动设备,它也是该手机在厂家的"档案"和"身份证号".IMEI码由GSM(全球移动通信协会)统一分配,授权BABT(英国通信认证管理委员会)审受.其总长为15位,每位数字仅使用0~9的数字(含义见下文).

       IMEI由15位数字组成,其组成为:

  • 1、前6位数(TAC,Type ApprovalCode)是"型号核准号码",一般代表机型.
  • 2、接着的2位数(FAC,Final Assembly Code)是"最后装配号",一般代表产地.
  • 3、之后的6位数(SNR)是"串号",一般代表生产顺序号.
  • 4、最后1位数(SP)通常是"0",为检验码,备用.

      IMEI校验码算法:

  • (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和
  • (2).将奇数位数字相加,再加上上一步算得的值
  • (3).如果得出的数个位是0则校验位为0,否则为10减去个位数

     如:35 89 01 80 69 72 41 偶数位乘以2得到5*2=10 9*2=18 1*2=02 0*2=00 9*2=18 2*2=04 1*2=02,计算奇数位数字之和和偶数位个位十位之和,得到 3+(1+0)+8+(1+8)+0+(0+2)+8+(0+0)+6+(1+8)+7+(0+4)+4+(0+2)=63 => 校验位 10-3 = 7

char GetIMEICheckDigit(char *pp_Imei){ int i; int vl_Sum1 = 0, vl_Sum2 = 0, vl_Total = 0; int vl_Temp = 0; for (i = 0; i<14; i++) {  /*(1)将奇数位数字相加(从1开始计数)*/  if ((i % 2) == 0)  {   vl_Sum1 = vl_Sum1 + pp_Imei[i] - '0';  }  else  {   /*(2)将偶数位数字分别乘以2,分别计算个位数和十位数之和(从1开始计数)*/   vl_Temp = (pp_Imei[i] - '0') * 2;   if (vl_Temp < 10)   {    vl_Sum2 = vl_Sum2 + vl_Temp;   }   else   {    vl_Sum2 = vl_Sum2 + 1 + vl_Temp - 10;   }  } } /*(1)+(2)*/ vl_Total = vl_Sum1 + vl_Sum2; /*如果得出的数个位是0则校验位为0,否则为10减去个位数 */ if ((vl_Total % 10) == 0) {  return '0'; } else {  return (char)(10 - (vl_Total % 10) + '0'); }}

           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值