选中内容(绿色)时除了会搜索文章名,还会搜索文章内容
点击结果中的文章名进入文章界面后可以按Ctrl+F在页面内搜索
  • 版权:CC BY-SA 4.0
  • 创建:2019-10-12
  • 更新:2020-09-15
IMEI(International Mobile Equipment Identity)即国际移动设备识别码,用以标识 TD-SCDMA、WCDMA 和 GSM 制式的移动终端设备,使每一个移动终端都具备全球唯一的设备识别码。本文主要讲IMEI组成与校验算法(生成IMEI)


组成

IMEI 由 15 位 0-9 的十进制数字组成,根据 IMEI 国际标准, IMEI可分为 TAC(Type Allocation Code,型号分配码)、序列号和校验位三个组成部分,其编号格式如下:

TAC-型号分配码(8位) 序列号(6位) 校验位(1位)
NNXXXXXX ZZZZZZ A
  • TAC 的组成及含义
    如上图所示,TAC 由 8 位数字组成,实际上目前所有 IMEI审核机构均是对 TAC 进行核发与管理。
    TAC 前 2 位“NN”为审批机构标识码,通过不同的号码代表不同的 TAC 审批机构。目前 BABT 的审批机构标识码为“35”,即核发以“35”开头的 TAC;TAF 的审批机构标识码为“86”,即核发以“86”开头的TAC。TAC 后 6 位“XXXXXX”为审批机构定义的移动终端型号标识码。

  • 序列号的组成及含义
    IMEI 的 9-14 位 数 字 “ ZZZZZZ ” 为 产 品 序 列 号 , 代 表“000000-999999”共 100 万个编号,企业根据实际生产需要对某个固定型号的终端设备进行分配。因此,企业为每个型号所申请的 TAC 可以被用于同型号的 100 万台终端上,当一个型号的终端产量超过 100 万台时,需再次申请另外的 TAC。根据 GSMA 发布的 TS.06 (DG06)IMEI Allocation and Approval Guidelines v8.0(《IMEI 号分配和审批指导文件》)相关要求,自 2015 年 6月 22 日起,一个 TAC 只能对应一个产品型号。

  • 校验码的含义
    校验码(Check Digit)可通过 Luhn 公式(ISO/IEC 7812)计算得到,具体计算方法参考 3GPP TS 23.003 中附录 B 的要求。校验码用于企业对 IMEI 所有其他数字进行校验,目前暂不被运营商所使用。

校验位算法

15位IMEI
比如:123456781234568 (当然这只是方便识别举得例子不是实际的码,实际的需要按照要求申请TAC)

  • 定义第一位位偶数位
  • 则先计算所有偶数位之和为eSum
  • 所有奇数位×2,然后取个位和十位的数值之和,比如11取值位2,24取值位6,然后累加和位oSum
  • total = oSum+eSum, 如果值为0,则校验位为0,否则取10减去total的个位数值,比如12346则取值4,12340则取值0

python代码:

  1. def IMEI_checksum(tac_number, serial_number):
  2. imei_str = "%08d%06d" %(tac_number, serial_number)
  3. i = 0
  4. eSum = 0
  5. oSum = 0
  6. for num in imei_str:
  7. if i%2 == 0:
  8. eSum += int(num)
  9. else:
  10. tmp = int(num)*2
  11. tmp = tmp//10 + tmp%10
  12. oSum += tmp
  13. i += 1
  14. total = oSum + eSum
  15. checkSum = 0
  16. if total%10 != 0:
  17. checkSum = 10 - total%10
  18. imei_str += str(checkSum)
  19. return imei_str
  20. tac = 12345678
  21. serial_number = 0
  22. for i in range(0,50):
  23. print(IMEI_checksum(tac,serial_number+i))

相关网站

文章有误?有想法想讨论?查看或者发起勘误/讨论 主题
(发起评论需要先登录 github)

/wallpaper/wallhaven-j5lk95.jpg