手机IMEI码规则及算法介绍

记得之前说过imsi的算法规则,今天来说一下imei、大部分都引自网络。以前一直以为这个东西是随机生成的15位数字,事实上,IMEI遵循GSM Association给定的IMEI格式,校验遵循Luhn算法(模10算法)。

对于大部分APP厂商来说,一般不会耗费成本去对接一个查询IMEI真伪的API,但是让程序员写个算法校验一下还是很简单的,如此逆过来随机和推算即可生成符合简单校验的IMEI。所以通过规则来生成符合条件的IMEI还是很有必要的

https://imeidb.gsma.com/imei/resources/documents/GSMA%20TAC%20%E5%9F%B9%E8%AE%AD%E6%9D%90%E6%96%99%20No.1%20GSMA%20TAC%E6%A0%B8%E5%8F%91%E5%8F%8AIMEI%E7%BC%96%E7%A0%81%E8%A7%84%E5%88%99%202.0.pdf

自己随机生成的话主要是后7位(6位随机000000-999999,加上一位计算出来的校验码),至于前面,不太建议随机,平时搜集一点主流机型的IMEI,把前面固定就好了

.版本 2

.子程序 Luhn_校验, 逻辑型, 公开, 模10校验
.参数 数字文本, 文本型
.局部变量 len, 整数型
.局部变量 i, 整数型
.局部变量 奇数位和, 整数型
.局部变量 偶数位和, 整数型
.局部变量 int, 整数型

len = 取文本长度 (数字文本)
奇数位和 = 0
偶数位和 = 0
.计次循环首 (len, i)
    int = 到整数 (取文本中间 (数字文本, len - i + 1, 1))
    .如果 (i % 2 = 0)
        int = int × 2
        偶数位和 = 偶数位和 + int \ 10 + int % 10
    .否则
        奇数位和 = 奇数位和 + int
    .如果结束

.计次循环尾 ()
返回 ((偶数位和 + 奇数位和) % 10 = 0)


.子程序 Luhn_计算IMEI校验码, 整数型, 公开, 传入14位
.参数 数字文本, 文本型
.局部变量 len, 整数型
.局部变量 i, 整数型
.局部变量 奇数位和, 整数型
.局部变量 偶数位和, 整数型
.局部变量 int, 整数型
.局部变量 校验和, 整数型
.局部变量 余数, 整数型

len = 取文本长度 (数字文本)
奇数位和 = 0
偶数位和 = 0
.计次循环首 (len, i)
    int = 到整数 (取文本中间 (数字文本, i, 1))
    .如果 (i % 2 = 0)
        int = int × 2
        偶数位和 = 偶数位和 + int \ 10 + int % 10
    .否则
        奇数位和 = 奇数位和 + int
    .如果结束

.计次循环尾 ()

校验和 = 偶数位和 + 奇数位和
余数 = 校验和 % 10

返回 (选择 (余数 = 0, 0, 到整数 ((校验和 \ 10 + 1) × 10 - 校验和)))




.子程序 IMEI_随机, 文本型, 公开
.参数 ReportingBodyIdentifier, 文本型, 可空, 分配机构标识 TAC码前两位 01为美国CTIA,35为英国BABT,86为中国TAF
.参数 TAC4, 文本型, 可空, TAC后四位
.参数 FAC, 文本型, 可空, Final Assembly Code 最终装配地代码
.参数 SNR, 文本型, 可空, 000000-999999 Serial Number,序列号,由第9位开始的6位数字组成,区分每部手机的生产序列号。
.局部变量 IMEI, 文本型



SNR = 到文本 (取随机数_asm_Ex (0, 999999))
IMEI = ReportingBodyIdentifier + TAC4 + FAC + 取文本左边 (“000000”, 6 - 取文本长度 (SNR)) + SNR
返回 (IMEI + 到文本 (Luhn_计算IMEI校验码 (IMEI)))


.子程序 取随机数_asm_Ex, 整数型, 公开, 真 随机
.参数 最小, 整数型
.参数 最大, 整数型

.如果真 (最大 < 最小)
    返回 (最大 - 1)
.如果真结束
置入代码 ({ 81, 82, 15, 49, 185, 23, 0, 0, 0, 247, 225, 131, 192, 7, 139, 77, 12, 43, 77, 8, 65, 51, 210, 247, 241, 3, 85, 8, 139, 194, 90, 89, 201, 194, 8, 0 })
返回 (0)

发表评论