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

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

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
————————————————

#!/usr/bin/python3


def getlastbit():
imei_str = input("input imei:")
if 14 != len(imei_str):
print("ERROR!Please input 14 bit IMEI!")
elif imei_str.isnumeric():
i = 0
sum1 = 0
for var in imei_str:
# print(type(var))
var_int = int(var)
# print(type(var_int))
if 0 == i % 2:
ge = var_int * 2 % 10
sum1 = sum1 + ge + (var_int * 2 - ge) / 10
else:
sum1 = sum1 + var_int
bit = 0
if 0 == sum1 % 10:
bit = 0
elif sum1 > 100:
bit = 10 - sum1 % 100 % 10
else:
bit = 10 - sum1 % 10

print("The full IMEI is:" + imei_str + str(int(bit)))

else:
print("ERROR!!!Please input number type!!!")


# start to find
if __name__ == '__main__':
getlastbit()

实际运行如下:
01-26 12:54