android中 IMEI和ICCID的校验位计算

2 篇文章 0 订阅
1 篇文章 0 订阅

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

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

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

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

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

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

86468203802591
 12 12 4 6 0 10 2
81+241+284068021+092

第三行相加 得到  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  

8986026219150703440
16 16 0 12 2 2 0 0 8 0
1+691+66021+2229250703840

第三行相加 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";
       }
 }

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值