IMEI修改(IMEI第十五位驗證碼的計算)

來源:互聯網
上載者:User

最近應客戶要求做IMEI修改功能,於是認真的學習了IMEI的編排規則,以及如何算出IMEI:

1、什麼是IMEI?
IMEI為TAC + FAC + SNR + SP。IMEI(International Mobile Equipment Identity)是國際行動裝置身份碼的縮寫,國際移動裝備辨識碼,是由15位元字組成的"電子串號",它與每台手機一一對應,而且該碼是全世界唯一的。每一隻手機在組裝完成後都將被賦予一個全球唯一的一組號碼,這個號碼從生產到交付使用都將被製造生產的廠商所記錄。

其組成為:
1、前6位元(TAC)是"型號核准號碼",一般代表機型。
2、接著的2位元(FAC)是"最後裝配號",一般代表產地。
3、之後的6位元(SNR)是"串號",一般代表生產順序號。
4、最後1位元(SP)通常是"0",為檢驗碼,目前暫備用。
IMEI碼貼在手機背面的標誌上,並且讀寫於手機記憶體中。它也是該手機在廠家的"檔案"和"社會安全號碼"。
 ------TAC------------     --FAC-     ------SNR-----------
 D14 D13 D12 D11 D10 D9    D8  D7    D6  D5  D4  D3  D2  D1  D0
  3   5   3   1   1   4     0  0      8   0   9  6   3    6  6
計算IMEI驗證碼的步驟:
1、把IMEI的奇數位元*2,如:D1,D3,D5,……D13
 D13  D11  D9  D7  D5   D3   D1
  10   2   8   0   0    12    12
2、將計算得到的7個奇數位元字分別以個位元相加(如果得到的是個兩位元,則十位和個位分別當成個位元來相加),再加上7個偶數位元字,如:D2,D4,D6……D14
3+1+0+3+2+1+8+0+0+8+0+9+1+2+3+1+2=44
3、如果第2步計算得到的數字末位為0,則驗證碼數字為0。如果第2步計算結果末位元不是0,則以大於第2步計算結果的以0結尾的雙位整數減去第2步的計算結果,所獲得的個位元即為驗證碼。
D0 = 50 -44 =6

2、下面附上自己寫的luhn演算法

/***********************************************************************************Function Name :CGIBASE_AutoChangeIMEIDescription   :傳入14位IMEI值,計算出第15位校正碼,並返回15位IMEI值Author:zhou Ying***********************************************************************************/unsigned long CGIBASE_AutoChangeIMEI(char *pcSource, char *pcDest){       int i,j,k;      int iTotal,iEvenTotal,iAddTotal,iTemp,iAuth;        char acEven[10],acAdd[10], acTemp[3],acAuth[2];     if ( ( NULL == pcSource ) || ( NULL == pcDest ) )    {        return 1;    }        memset(acEven, 0x0, sizeof(acEven));        memset(acAdd, 0x0, sizeof(acAdd));          j=0;        k=0;        iTemp=0;        iEvenTotal=0;       iAddTotal=0;        iTotal=0;       iAuth=0;           for(i=0; i<14; i++)     {               if( 0 == (i%2) )                {                       acEven[j]=*(pcSource+i);                        memset(acTemp, 0x0, sizeof(acTemp));                        sprintf(acTemp, "%c", acEven[j]);                       iTemp = atoi(acTemp);                       iEvenTotal += iTemp;                        j += 1;             }               else                {                       acAdd[k]=*(pcSource+i);                     memset(acTemp, 0x0, sizeof(acTemp));                        sprintf(acTemp, "%c", acAdd[k]);                            iTemp = atoi(acTemp) * 2;                               iAddTotal += (iTemp / 10) + (iTemp % 10);                       k += 1;             }       }           iTotal = iEvenTotal + iAddTotal;        if( iTotal >= 100 )     {               iAuth = iTotal % 100 %10;               if( iAuth != 0 )                {                       iAuth = ((iTotal % 100) / 10 + 1)*10 - iTotal % 100;                }       }       else      {             iAuth = iTotal % 10;            if( iAuth != 0 )                {                       iAuth = (iTotal / 10 + 1)*10 - iTotal;              }      }            memset(acAuth, 0x0, sizeof(acAuth));        sprintf(acAuth, "%d", iAuth);           strcat(pcDest, pcSource);       strcat(pcDest, acAuth);    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.