转自:http://blog.csdn.net/fengyifei11228/article/details/45919797



IMEI是国际移动通讯设备识别号(International Mobile Equipment Identity)的缩写,用于GSM系统。

由15位数字组成,前6位(TAC)是型号核准号码,代表手机类型。接着2位(FAC)是最后装配号,代表产地。后6位(SNR)是串号,代表生产顺序号。最后1位(SP)是检验码。

MEID是移动通讯设备识别号(Mobile Equipment IDentifier)的缩写,用于CDMA系统。

由15位16进制数字组成(一般使用前14位),前8位是生产商编号,后6位是串号,最后1位是检验码。

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

MEID校验码算法:
(1).将偶数位数字分别乘以2,分别计算个位数和十位数之和,注意是16进制数
(2).将奇数位数字相加,再加上上一步算得的值
(3).如果得出的数个位是0则校验位为0,否则为10(这里的10是16进制)减去个位数
如:AF 01 23 45 0A BC DE 偶数位乘以2得到F*2=1E 1*2=02 3*2=06 5*2=0A A*2=14 C*2=18 E*2=1C,计算奇数位数字之和和偶数位个位十位之和,得到 A+(1+E)+0+2+2+6+4+A+0+(1+4)+B+(1+8)+D+(1+C)=64 => 校验位 10-4 = C

[java] view plaincopyprint?
  1. /**
  2. * IMEI是国际移动通讯设备识别号(International Mobile Equipment Identity)的缩写,用于GSM系统。
  3. * 由15位数字组成,前6位(TAC)是型号核准号码,代表手机类型。接着2位(FAC)是最后装配号,代表产地。后6位(SNR)是串号,代表生产顺序号。最后1位(SP)是检验码。
  4. * MEID是移动通讯设备识别号(Mobile Equipment IDentifier)的缩写,用于CDMA系统。
  5. * 由15位16进制数字组成,前8位是生产商编号,后6位是串号,最后1位是检验码。
  6. * @author fengyifei11228
  7. * @since 2015-05-22
  8. */
  9. public class DeviceUtil {
  10. /**
  11. * 格式化MEID
  12. * 因为MEID格式不统一,长度有14位和16位的,所以,为了统一,将14位和16位的MEID,统一设置为15位的 设置格式:
  13. * 如果MEID长度为14位,那么直接得到第15位,如果MEID长度为16位,那么直接在根据后14位得到第15位
  14. * 如果MEID长度为其他长度,那么直接返回原值
  15. * @param meid
  16. * @return
  17. */
  18. public static String formatMeid(String meid) {
  19. int dxml = meid.length();
  20. if (dxml != 14 && dxml != 16) {
  21. return meid;
  22. }
  23. String meidRes = "";
  24. if (dxml == 14) {
  25. meidRes =  meid + getmeid15(meid);
  26. }
  27. if (dxml == 16) {
  28. meidRes = meid.substring(2) + getmeid15(meid.substring(2));
  29. }
  30. return meidRes;
  31. }
  32. /**
  33. * 格式化IMEI
  34. * 因为IMEI格式不统一,长度有14位和16位的,所以,为了统一,将14位和16位的MEID,统一设置为15位的 设置格式:
  35. * 如果IMEI长度为14位,那么直接得到第15位,如果MEID长度为16位,那么直接在根据前14位得到第15位
  36. * 如果IMEI长度为其他长度,那么直接返回原值
  37. * @param imei
  38. * @return
  39. */
  40. public static String formatImei(String imei) {
  41. int dxml = imei.length();
  42. if (dxml != 14 && dxml != 16) {
  43. return imei;
  44. }
  45. String imeiRes = "";
  46. if (dxml == 14) {
  47. imeiRes =  imei + getimei15(imei);
  48. }
  49. if (dxml == 16) {
  50. imeiRes =  imei + getimei15(imei.substring(0,14));
  51. }
  52. return imeiRes;
  53. }
  54. /**
  55. * 根据MEID的前14位,得到第15位的校验位
  56. * MEID校验码算法:
  57. * (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和,注意是16进制数
  58. * (2).将奇数位数字相加,再加上上一步算得的值
  59. * (3).如果得出的数个位是0则校验位为0,否则为10(这里的10是16进制)减去个位数
  60. * 如:AF 01 23 45 0A BC DE 偶数位乘以2得到F*2=1E 1*2=02 3*2=06 5*2=0A A*2=14 C*2=18 E*2=1C,
  61. *  计算奇数位数字之和和偶数位个位十位之和,得到 A+(1+E)+0+2+2+6+4+A+0+(1+4)+B+(1+8)+D+(1+C)=64
  62. *  校验位 10-4 = C
  63. * @param meid
  64. * @return
  65. */
  66. private static String getmeid15(String meid) {
  67. if (meid.length() == 14) {
  68. String myStr[] = { "a", "b", "c", "d", "e", "f" };
  69. int sum = 0;
  70. for (int i = 0; i < meid.length(); i++) {
  71. String param = meid.substring(i, i + 1);
  72. for (int j = 0; j < myStr.length; j++) {
  73. if (param.equalsIgnoreCase(myStr[j])) {
  74. param = "1" + String.valueOf(j);
  75. }
  76. }
  77. if (i % 2 == 0) {
  78. sum = sum + Integer.parseInt(param);
  79. } else {
  80. sum = sum + 2 * Integer.parseInt(param) % 16;
  81. sum = sum + 2 * Integer.parseInt(param) / 16;
  82. }
  83. }
  84. if (sum % 16 == 0) {
  85. return "0";
  86. } else {
  87. int result = 16 - sum % 16;
  88. if (result > 9) {
  89. result += 65 - 10;
  90. }
  91. return (char)result + "";
  92. }
  93. } else {
  94. return "";
  95. }
  96. }
  97. /**
  98. * 根据IMEI的前14位,得到第15位的校验位
  99. * IMEI校验码算法:
  100. * (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和
  101. * (2).将奇数位数字相加,再加上上一步算得的值
  102. * (3).如果得出的数个位是0则校验位为0,否则为10减去个位数
  103. * 如: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,计算奇数位数字之和和偶数位个位十位之和,
  104. * 得到 3+(1+0)+8+(1+8)+0+(0+2)+8+(0+0)+6+(1+8)+7+(0+4)+4+(0+2)=63
  105. * 校验位 10-3 = 7
  106. * @param imei
  107. * @return
  108. */
  109. private static String getimei15(String imei){
  110. if (imei.length() == 14) {
  111. char[] imeiChar=imei.toCharArray();
  112. int resultInt=0;
  113. for (int i = 0; i < imeiChar.length; i++) {
  114. int a=Integer.parseInt(String.valueOf(imeiChar[i]));
  115. i++;
  116. final int temp=Integer.parseInt(String.valueOf(imeiChar[i]))*2;
  117. final int b=temp<10?temp:temp-9;
  118. resultInt+=a+b;
  119. }
  120. resultInt%=10;
  121. resultInt=resultInt==0?0:10-resultInt;
  122. return resultInt + "";
  123. }else{
  124. return "";
  125. }
  126. }
  127. }

IMEI/MEID校验位计算相关推荐

  1. 程序实现IMEI/MEID校验位计算

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

  2. android中 IMEI和ICCID的校验位计算

    我们都知道在android 中有IMEI和ICCID 这两项数据. 至于这两项数据的获取方式以及所表示的意思在此我就不写了.主要讲讲这两项数据最后一位的校验位如何计算的. IMEI共15位 最后一位是 ...

  3. php验证imei算法,IMEI校验位计算-基于python3

    IMEI是国际移动通讯设备识别号(International Mobile Equipment Identity)的缩写,用于GSM系统. 由15位数字组成,前6位(TAC)是型号核准号码,代表手机类 ...

  4. 什么是IMEI / MEID?他们有什么不同?

    摘要: 最近小编了解到一个新的概念:MEID码.说实话,一开始小编并不了解这是个什么.小编以为是不是打字的时候打错了啊,是不是要了解的是IMEI码呢?后来百度了一下才知道我理解错了.小编就做一回好学生 ...

  5. CRC-16/MODBUS 校验位计算

    实验指令: 前23位表示 信息头 + 信息内容.24,25位是待计算的校验位.26位是结束码 7E 01 00 00 01 10 02 00 27 00 0C 00 02 00 00 00 00 00 ...

  6. Python ISBN号概述,校验位计算,10位-13位转换,验证,连字符,及常用库isbnid,isbnlib,isbntools的使用

    ISBN概述 因为工作原因经常需要用到ISBN.ISBN是国际标准书号的简称(International Standard Book Number),主要用于标识文献,也即是文献的"身份证号 ...

  7. ICCID IMSI IMEI MEID

    IMEI-----与手机相关 俗称:手机的序列号,一般买的手机都有贴着这个东东,或者用暗码查询(*#06#) 学名:国际移动设备识别码 组成:IMEI = TAC+FAC+SNR+SP MEID--- ...

  8. Qt crc16校验位计算

    1.crc校验类代码如下: 头文件 #ifndef CRC16CHECK_H #define CRC16CHECK_H /** * @file crc16check.h * @brief 对16位cr ...

  9. mysql身份证校验码_用sql实现18位身份证校验代码分享 身份证校验位计算

    身份证校验码的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.第i位对应的数为[2^(18-i)]mod11.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 ...

最新文章

  1. 继续咸鱼——2.18
  2. 『信息收集』GoogleHacking快速定位目标网站
  3. 如何在C++Builder中使用全局变量
  4. maven 和eclipse插件
  5. 简单部署 群晖 ×××
  6. React Native的安装和初始化(android /ios)
  7. 数据算法与结构基本知识
  8. indesign排版实例教程,如何更改页面大小?
  9. 如何“加密”你的email地址
  10. mac 微信不能设置代理服务器,mac微信能用但是浏览器上不了网
  11. 计算机进化阶段,进化计算
  12. 经纬能源安全稳定怎样理财收益最大?怎样理财才干收益最大?
  13. mysql 查询dual报错_MYSQL基础02(查询)
  14. putty下载链接提供
  15. 加码企业云原生进化,解读阿里云容器新品ACK Pro与ACK@Edge
  16. python手写字体程序_深度学习---手写字体识别程序分析(python)
  17. 测试cpu新旧软件,Revit2021 VS Revit2020新旧版本软件性能评测
  18. 百度seo html,百度seo需要什么技术
  19. Linux基础知识问题解答
  20. Mongodb网页管理工具,基于Spring Boot2.0,前端采用layerUI实现

热门文章

  1. SQL Server2012在程序开发中实用的一些新特性
  2. 【名单回顾】中国计算机学会NOI Online能力测试入门组获得前25%证书名单(北京地区小学组)
  3. 成都java薪资待遇怎么样?还值得学习吗?
  4. delphi5开发人员指南_建立开发人员职位的黄金指南
  5. 宏碁E5-471G加固态硬盘、内存条避坑指南
  6. 项目实战:借鉴Android API源码(Splitter-split和TextView-setText),不惧NullPointerException(文末彩蛋)
  7. 最完整的Andriod studio插件整理
  8. MacOs添加应用(以腾讯会议为例)的麦克风权限
  9. 【181225】VC++控制文字横向打印和纵向打印的方向源代码
  10. 高级职称17计算机,高级职称计算机考试