android中 IMEI和ICCID的校验位计算

        我们都知道在android 中有IMEI和ICCID 这两项数据. 至于这两项数据的获取方式以及所表示的意思在此我就不写了.主要讲讲这两项数据最后一位的校验位如何计算的.

        IMEI共15位 最后一位是校验位. 其校验位计算规则如下:

        1.   从左到右将偶数位数字分别乘以2,然后计算个位数和十位数之和        

        2.  将奇数位数字相加,再加上上一步算得的值

        3.  如果得出的数个位是0则校验位为0,否则为10减去个位数

     例: 864682038025912   最后一位校验位是 2  所以我们拿出前14位来计算

8 6 4 6 8 2 0 3 8 0 2 5 9 1
  12   12   4   6   0   10   2
8 1+2 4 1+2 8 4 0 6 8 0 2 1+0 9 2

第三行相加 得到  8+1+2+4+1+2+8+4+0+6+8+0+2+1+9+2 = 58

OK, 我们得到的值是58  显然个位数字不是0 所以校验位的值应该是 10-8  = 2  最后校验位就是 2

现在Java代码如下:

/**
  *  根据IMEI的前14位 计算出第15位
  * @param imei  的前14位
  * @return
  */
public 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 "0";
      }
}

          ICCID共20位, 最后一位的校验位计算规则如下:

          1.   取前19位 . 从左到右奇数位开始. 乘以2  然后计算个位与十位数之和.

          2.  将所有偶数位的数字与上一步得到的值全部相加

          3.  将上一步得到的值乘以9  然后取余. 得到的值就是第20位的校验位

      例: 89860262191507034404  最后一位校验位是4  

8 9 8 6 0 2 6 2 1 9 1 5 0 7 0 3 4 4 0
16   16   0   12   2   2   0   0   8   0
1+6 9 1+6 6 0 2 1+2 2 2 9 2 5 0 7 0 3 8 4 0

第三行相加 1+6+9+1+6+6+0+2+1+2+2+2+9+2+5+0+7+0+3+8+4+0=76

76*9 = 684

校验位就是  684%10=4  各位可以到 http://www.heicard.com/check_iccid 验证该计算方法.

java代码如下

/**
  * 获取ICCID的第20位
  * @param iccid iccid的前19位
  * @return
  */
public static String getICCID20(String iccid){
     if (iccid.length() == 19) {
          char[] imeiChar=iccid.toCharArray();
          int resultInt = 0;
          for (int i = 0; i < imeiChar.length; i++) {
            	int a=Integer.parseInt(String.valueOf(imeiChar[i]))*2;    
           		int count = a/10+a%10;     //将十位数 与个位数 相加 
            	resultInt = resultInt+ count;
            	i++;
            	if(i<19) {
            		int b=Integer.parseInt(String.valueOf(imeiChar[i]));    
            		resultInt = resultInt + b;
            	}
           }
           resultInt = resultInt*9;
           return String.valueOf(resultInt%10);
       }else{
            return "6";
       }
 }

猜你喜欢

转载自blog.csdn.net/SpHinner/article/details/82782567
今日推荐