根据IMEI的前14位,得到第15位的校验位,java转python

测试需要用到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')

你可能感兴趣的:(测试)