IMEI格式 校验

2018-11-28  本文已影响49人  Neucrack

IMEI(International Mobile Equipment Identity)即国际移动设备识别码,用以标识 TD-SCDMA、WCDMA 和 GSM 制式的移动终端设备,使每一个移动终端都具备全球唯一的设备识别码。
IMEI 由 15 位 0-9 的十进制数字组成,根据 IMEI 国际标准, IMEI可分为 TAC(Type Allocation Code,型号分配码)、序列号和校验位三个组成部分,其编号格式如下:

TAC-型号分配码(8位) 序列号(6位) 校验位(1位)
NNXXXXXX ZZZZZZ A

1、TAC 的组成及含义
如上图所示,TAC 由 8 位数字组成,实际上目前所有 IMEI审核机构均是对 TAC 进行核发与管理。
TAC 前 2 位“NN”为审批机构标识码,通过不同的号码代表不同的 TAC 审批机构。目前 BABT 的审批机构标识码为“35”,即核发以“35”开头的 TAC;TAF 的审批机构标识码为“86”,即核发以“86”开头的TAC。TAC 后 6 位“XXXXXX”为审批机构定义的移动终端型号标识码。
2、序列号的组成及含义
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 只能对应一个产品型号。
3、校验码的含义
校验码(Check Digit)可通过 Luhn 公式(ISO/IEC 7812)计算得到,具体计算方法参考 3GPP TS 23.003 中附录 B 的要求。校验码用于企业对 IMEI 所有其他数字进行校验,目前暂不被运营商所使用。

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

def IMEI_checksum(tac_number, serial_number):
    imei_str = "%08d%06d" %(tac_number, serial_number)
    i = 0
    eSum = 0
    oSum = 0
    for num in imei_str:
        if i%2 == 0:
            eSum += int(num)
        else:
            tmp = int(num)*2
            tmp = tmp//10 + tmp%10
            oSum += tmp
        i += 1
    total = oSum + eSum
    checkSum = 0
    if total%10 != 0:
        checkSum = 10 - total%10

    imei_str += str(checkSum)
    return imei_str



tac = 12345678
serial_number = 0
for i in range(0,50):
    print(IMEI_checksum(tac,serial_number+i))

相关网站

上一篇下一篇

猜你喜欢

热点阅读