最近应客户要求做IMEI修改功能,于是认真的学习了IMEI的编排规则,以及如何算出IMEI:

1、什么是IMEI?
IMEI为TAC + FAC + SNR + SP。IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。

其组成为:
1、前6位数(TAC)是"型号核准号码",一般代表机型。
2、接着的2位数(FAC)是"最后装配号",一般代表产地。
3、之后的6位数(SNR)是"串号",一般代表生产顺序号。
4、最后1位数(SP)通常是"0",为检验码,目前暂备用。
IMEI码贴在手机背面的标志上,并且读写于手机内存中。它也是该手机在厂家的"档案"和"身份证号"。
 ------TAC------------     --FAC-     ------SNR-----------
 D14 D13 D12 D11 D10 D9    D8  D7    D6  D5  D4  D3  D2  D1  D0
  3   5   3   1   1   4     0  0      8   0   9  6   3    6  6
计算IMEI验证码的步骤:
1、把IMEI的奇数位数*2,如:D1,D3,D5,……D13
 D13  D11  D9  D7  D5   D3   D1
  10   2   8   0   0    12    12
2、将计算得到的7个奇数位数字分别以个位数相加(如果得到的是个两位数,则十位和个位分别当成个位数来相加),再加上7个偶数位数字,如:D2,D4,D6……D14
3+1+0+3+2+1+8+0+0+8+0+9+1+2+3+1+2=44
3、如果第2步计算得到的数字末位为0,则验证码数字为0。如果第2步计算结果末位数不是0,则以大于第2步计算结果的以0结尾的双位整数减去第2步的计算结果,所获得的个位数即为验证码。
D0 = 50 -44 =6

2、下面附上自己写的luhn算法

/***********************************************************************************
Function Name :CGIBASE_AutoChangeIMEI
Description   :传入14位IMEI值,计算出第15位校正码,并返回15位IMEI值
Author:zhou Ying
***********************************************************************************/
unsigned long CGIBASE_AutoChangeIMEI(char *pcSource, char *pcDest)
{   int i,j,k;  int iTotal,iEvenTotal,iAddTotal,iTemp,iAuth;    char acEven[10],acAdd[10], acTemp[3],acAuth[2]; if ( ( NULL == pcSource ) || ( NULL == pcDest ) ){return 1;}memset(acEven, 0x0, sizeof(acEven));    memset(acAdd, 0x0, sizeof(acAdd));      j=0;    k=0;    iTemp=0;    iEvenTotal=0;   iAddTotal=0;    iTotal=0;   iAuth=0;   for(i=0; i<14; i++) {       if( 0 == (i%2) )        {           acEven[j]=*(pcSource+i);            memset(acTemp, 0x0, sizeof(acTemp));            sprintf(acTemp, "%c", acEven[j]);           iTemp = atoi(acTemp);           iEvenTotal += iTemp;            j += 1;     }       else        {           acAdd[k]=*(pcSource+i);         memset(acTemp, 0x0, sizeof(acTemp));            sprintf(acTemp, "%c", acAdd[k]);                iTemp = atoi(acTemp) * 2;                   iAddTotal += (iTemp / 10) + (iTemp % 10);           k += 1;     }   }   iTotal = iEvenTotal + iAddTotal;    if( iTotal >= 100 ) {       iAuth = iTotal % 100 %10;       if( iAuth != 0 )        {           iAuth = ((iTotal % 100) / 10 + 1)*10 - iTotal % 100;        }   }   else  {     iAuth = iTotal % 10;    if( iAuth != 0 )        {           iAuth = (iTotal / 10 + 1)*10 - iTotal;      }  }        memset(acAuth, 0x0, sizeof(acAuth));    sprintf(acAuth, "%d", iAuth);       strcat(pcDest, pcSource);   strcat(pcDest, acAuth);return 0;
}

IMEI修改(IMEI第十五位验证码的计算)相关推荐

  1. 5GCPE如何支持4G物联网卡(修改IMEI)

    1. 背景 问:有些物联网卡限定在某些设备上用,能放到5GCPE上吗?(其好处自己百度吧) 答:可以,把原设备上的IMEI写到目标5GCPE上就可以了. 市面上许多5GCPE是可以修改IMEI的,本文 ...

  2. Phonegap获取imei (修改phonegap官方提供文件)

    Phonegap  获取手机设备信息  IMEI phonegap的Device 提供有: device.model     :返回设备的模型或产品的名称 device.cordova  :返回cor ...

  3. MTK android 可修改IMEI方法

    我记得在csdn上看过一个博主写了一篇相关的文章,思路差不多. 他的方法是写了一个apk来修改imei号,本人就偷懒了,直接在平台上修改. 拨号界面发送指令 *#123456789012345#666 ...

  4. 安卓手机修改IMEI方法

    安卓手机如何修改IMEI串号,如何模拟手机IMEI号?手机的IMEI俗称串号,一般是手机的唯一识别号,IMEI一变也就是手机变成另一个手机的意思了,因此有很多朋友做项目需要用许多手机,那怎么办,就修改 ...

  5. 红米手机使用应用沙盒动态修改imei信息

    之前文章介绍了怎么在安卓手机上安装激活xposed框架,xposed框架的极强的功能各位都清楚,可以不修改APK的前提下,修改系统内部的参数,比如在某些应用范畴,各位需要修改手机的某个系统参数,这个时 ...

  6. 801a qcn文件IMEI修改

    1.打开IMEI Converter转换你想要修改的IMEI 16进制值 2.打开Hxdr软件,在软件中打开QCN文件 3.按下 CTRL + H  输入  2C020 确定 4.选中这一段FF 粘贴 ...

  7. 小米手机动态修改imei信息

    前面文章介绍了如何在安卓手机上安装激活xposed框架,xposed框架的牛逼之处功能大家都清楚,能够不修改apk的前提下,修改系统内核的参数,打比方在某些应用领域,大家需要修改手机的某个系统参数,这 ...

  8. MTK平台手动修改IMEI号,恢复出厂设置后无法保留最新修改的IMEI号,要求做成保留的

    三大部分 1.在NVram里面设置记录IMEI 的两个数据,一个是 手动写的816 ,831,一个记录上次工具写的866,851,另外NVram里面还有个工具写的占用了64 -72  和74-82 这 ...

  9. 智海浪花:一百二十五位知识分子的学佛历程

    在人类社会的演进变化中,科学及其发展与应用,在引领世人从愚昧迈向光明.从落后迈向先进的进程中,一直扮演着举足轻重的角色.在社会生活的方方面面,在遍及世界的每一个角落,科学的光辉都无处不在,科学的影响都 ...

  10. 微软2011年7月最有价值专家(MVP)名单 51CTO十五位用户当选

    微软2011年7月最有价值专家(MVP)名单 51CTO十五位用户当选  祝贺当选MVP的朋友!恭喜51CTO的MVP们! 微软2011年7月最有价值专家(MVP)当选名单如下(音序排名 不分先后): ...

最新文章

  1. centos7下安装intel Media Server Studio记录
  2. 看完这些细分领域别说小程序代理创业没有机会
  3. 前端- jquery- 总结
  4. Frida之安装和使用教程
  5. Python time datetime常用时间处理方法
  6. python if try except_python try except
  7. 技术人员兼职招聘平台HourlyHerd融资2200万美元C轮融资
  8. Bootstrap3 代码-程序输出
  9. LeetCode--70. 爬楼梯(动态规划)
  10. 华为云跻身Gartner报告中国三强,预示云计算市场的未来变局?
  11. [ 深度学习 ] —— 图卷积神经网络 GCN
  12. python如何安装scrapy库_Python爬虫:Scrapy框架的安装和基本使用
  13. (一)微信小程序云开发之登录界面设计
  14. android碎片化的解决方法,Android碎片化的处理
  15. win7首次使用计算机,首次安装win7系统如何进行硬盘分区
  16. Mac mini M1使用简单体验(编程、游戏、深度学习)
  17. 最简单的全球基站定位接口API
  18. 前端--CSS选择器,盒子模型学习
  19. pymongo 基本操作
  20. Java基础项目实战--大学生求职招聘信息网站系统

热门文章

  1. 基于YOLOv5的车辆识别系统
  2. ffmpeg 推流命令记载
  3. ev3pid巡线_据说这是最简单的乐高EV3巡线方法
  4. 动手学深度学习v2-线性代数课后习题
  5. iOS 开发技巧(一)
  6. 安阳工学院ACM历史(续)
  7. django和php学哪个好,哪个更适合我的项目:Django、Plone、php还是rubyonrails
  8. 数据结构1800题-错题集-第一章
  9. Three.js学习07
  10. Magnific Popup – 免费的响应式 jQuery Lightbox 插件