1. 程式人生 > >android中 IMEI和ICCID的校驗位計算

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";
       }
 }