测试需要用到imei,需要根据规则自动生成校验位。网上收到的是java代码,自己给改成了python。不过代码质量是渣,能解决即可,做个备忘。
规则:
* 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
* @param imei
* @return
Java代码:
private static String getimei15(String imei){
if (imei.length() == 14) {
char[] imeiChar=imei.toCharArray();
int resultInt=0;
for (int i = 0; i < imeiChar.length; i++) {
int a=Integer.parseInt(String.valueOf(imeiChar[i]));
i++;
final int temp=Integer.parseInt(String.valueOf(imeiChar[i]))*2;
final int b=temp<10?temp:temp-9;
resultInt+=a+b;
}
resultInt%=10;
resultInt=resultInt==0?0:10-resultInt;
return resultInt + "";
}else{
return "";
}
}
}
————————————————
Python代码:
#coding=utf-8
def getimei(imei):
if len(imei) == 14:
imeiChar = imei
sum1=0
sum2=0
for i in range(len(imeiChar)):
i = int(i)
if i%2!=0:
a=int(imeiChar[i])*2
if len(str(a))>1:
a = str(a)
temp=0
for i1 in range(len(a)):
temp += int(a[i1])
sum1 += temp
else:
sum1 += int(a)
i += 1
elif i%2==0:
b = int(imeiChar[i])
sum2 +=b
i += 1
sum = sum1+sum2
print('sum------',sum)
sum = str(sum)
for i in range(len(sum)):
if i%2!=0:
if sum[1]==0:
b=0
print('校验码是:',b)
imei=imei+str(b)
print(imei)
elif sum[1] !=0:
b=10-int(sum[1])
print('校验码是:', b)
imei=imei+str(b)
print(imei)
if __name__ == '__main__':
getimei('20200622000002')
原文链接:https://blog.csdn.net/qq_34593157/article/details/106905210