IMEI 码的校验和生成
IMEI 碼的校驗和生成
文章目錄
- IMEI 碼的校驗和生成
- IMEI 碼
- Luhn算法
- 代碼實現C
IMEI 碼
IMEI 碼,即手機的串號。它是 International Mobile Equipment Identity( 國際移動設備身份) 的簡稱,就像是手機的身份證,是用來幫助辨別手機身份真偽的。
第一部分 TAC,Type Allocation Code,類型分配碼,由8位數字組成(早期是6位), 是區分手機品牌和型號的編碼,該代碼由GSMA及其授權機構分配。其中TAC碼前兩位又是分配機構標識 (Reporting Body Identifier),是授權IMEI碼分配機構的代碼,如01為美國CTIA,35為英國BABT,86為中國TAF。
第二部分 FAC,Final Assembly Code,最終裝配地代碼,由2位數字構成, 僅在早期TAC碼為6位的手機中存在,所以TAC和FAC碼合計一共8位數字。FAC碼用于生產商內部區分生產地代碼。
第三部分 SNR,Serial Number,序列號,由第9位開始的6位數字組成,區分每部手機的生產序列號。
第四部分 CD,Check Digit,驗證碼,由前14位數字通過 Luhn算法計算得出。
第五部分 SVN,Software Version Number,軟件版本號, 區分同型號手機出廠時使用的不同軟件版本,僅在部分品牌的部分機型中存在。
MEI碼由GSM(Global System for Mobile Communications,全球移動通信協會)統一分配,授權BABT(British approvals Board of Telecommunications,英國通信認證管理委員會)審受。
在TS.06 IMEI Allocation and Approval Process中規定IMEI校驗應該通過Luhn算法計算,如下圖所示:
Luhn算法
代碼實現C
//返回iemi第15位校驗位 uint8_t MainWindow:: GetIMEICheckDigit(uint8_t *pp_Imei) {int i;int vl_Sum1 = 0, vl_Sum2 = 0, vl_Total = 0;int vl_Temp = 0;for (i = 0; i<14; i++){/*(1)將奇數位數字相加(從1開始計數)*/if ((i % 2) == 0){vl_Sum1 = vl_Sum1 + pp_Imei[i] ;}else{/*(2)將偶數位數字分別乘以2,分別計算個位數和十位數之和(從1開始計數)*/vl_Temp = (pp_Imei[i]) * 2;if (vl_Temp < 10){vl_Sum2 = vl_Sum2 + vl_Temp;}else{vl_Sum2 = vl_Sum2 + 1 + vl_Temp - 10;}}}/*(1)+(2)*/vl_Total = vl_Sum1 + vl_Sum2;/*如果得出的數個位是0則校驗位為0,否則為10減去個位數 */if ((vl_Total % 10) == 0){return 0;}else{return (10 - (vl_Total % 10) );} }Qt 程序實現界面:
軟件下載地址:
https://download.csdn.net/download/qq_21291397/38389253
總結
以上是生活随笔為你收集整理的IMEI 码的校验和生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习FreeRTOS的几点体会
- 下一篇: Cortex-A 处理器运行模型