計算IMEI號的校驗位

計算IMEI號的校驗位

       移動設備國際識別碼(IMEI:International Mobile Equipment Identification Number)是區別移動設備的標誌,具有唯一性,貼在手機背面的標誌上,並且儲存在移動設備中,可用於監控被竊或無效的移動設備,它也是該手機在廠家的"檔案"和"身份證號".IMEI碼由GSM(全球移動通信協會)統一分配,授權BABT(英國通信認證管理委員會)審受.其總長爲15位,每位數字僅使用0~9的數字(含義見下文).

       IMEI由15位數字組成,其組成爲:

  • 1、前6位數(TAC,Type ApprovalCode)是"型號覈准號碼",一般代表機型.
  • 2、接着的2位數(FAC,Final Assembly Code)是"最後裝配號",一般代表產地.
  • 3、之後的6位數(SNR)是"串號",一般代表生產順序號.
  • 4、最後1位數(SP)通常是"0",爲檢驗碼,備用.

      IMEI校驗碼算法:

  • (1).將偶數位數字分別乘以2,分別計算個位數和十位數之和
  • (2).將奇數位數字相加,再加上上一步算得的值
  • (3).如果得出的數個位是0則校驗位爲0,否則爲10減去個位數

     如:35 89 01 80 69 72 41 偶數位乘以2得到5*2=10 9*2=18 1*2=02 0*2=00 9*2=18 2*2=04 1*2=02,計算奇數位數字之和和偶數位個位十位之和,得到 3+(1+0)+8+(1+8)+0+(0+2)+8+(0+0)+6+(1+8)+7+(0+4)+4+(0+2)=63 => 校驗位 10-3 = 7

char GetIMEICheckDigit(char *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] - '0';
		}
		else
		{
			/*(2)將偶數位數字分別乘以2,分別計算個位數和十位數之和(從1開始計數)*/
			vl_Temp = (pp_Imei[i] - '0') * 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 (char)(10 - (vl_Total % 10) + '0');
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章