手机IMEI码规则介绍

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

手机IMEI码由15-17位数字组成。

第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码,该代码由GSMA及其授权机构分配。其中TAC码前两位又是分配机构标识(Reporting Body Identifier),是授权IMEI码分配机构的代码,如01为美国CTIA,35为英国BABT,86为中国TAF。

第二部分 FAC,Final Assembly Code,最终装配地代码,由2位数字构成,仅在早期TAC码为6位的手机中存在,所以TAC和FAC码合计一共8位数字。FAC码用于生产商内部区分生产地代码。

第三部分 SNR,Serial Number,序列号,由第9位开始的6位数字组成,区分每部手机的生产序列号。

第四部分 CD,Check Digit,验证码,由前14位数字通过Luhn算法计算得出。

第五部分 SVN,Software Version Number,软件版本号,区分同型号手机出厂时使用的不同软件版本,仅在部分品牌的部分机型中存在。

本站查询IMEI码仅需要输入前15位,软件版本号不需要输入。

http://www.imeidb.com/imei-structure

IMEI/MEID校验位计算

JAVA 实现 IMEI校验码算法

JAVA 批量生成IMEI 源代码

手机IMEI码规则及算法介绍

Luhn algorithm

检测无用imei号:

#coding:utf-8
__author__ = 'Mickel'
import sys
from pymongo import MongoClient
from pymongo.errors import DuplicateKeyError

def checkLuhn(purportedCC=''):
    sum = 0
    parity = len(purportedCC) % 2
    for i, digit in enumerate([int(x) for x in purportedCC]):
        if i % 2 == parity:
            digit *= 2
            if digit > 9:
                digit -= 9
        sum += digit
    return sum % 10 == 0

if __name__=="__main__":

    mode="aa"
    if mode=='DEV':
        print "测试 testing server importing."
        conn = MongoClient('xxx', 2777)
        db = conn.adrobot_v4
    else:
        print "正式 production server importing."
        conn = MongoClient('xxxx', 2777)
        db = conn.adrobot_v4
        db.authenticate("xx", "xx")

    collection = db.device

    #查询所有记录
    for data in collection.find():
        imei=data["_id"]
        if imei.isdigit() :
            flag=checkLuhn(imei)
            if flag==False:
                print imei,"  ",checkLuhn(imei)
                collection.remove({"_id":imei})
        else:
            print "包含字母"
        #sys.exit(2)

    # imei="A1000055BDB1AD"
    # print "A1000055BDB1AD".isdigit()
    # print checkLuhn(imei)

 

转载于:https://my.oschina.net/mickelfeng/blog/1552269

你可能感兴趣的:(手机IMEI码规则介绍)