15位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最後一位是驗證碼,通過官方提供的驗證方式就可以知道每一個imei是否為符合規則的imei號。
驗證規則:
1.區分imei的奇數位和偶數位。
2.奇數位相加。3.偶數為乘以2,若小於10則直接相加,大於10則對十位數和個位數進行相加。4.奇數位相加之和與第3步邏輯只和相加,獲取到一個數字。5.得到的數字與10進行取余,餘數若為0,則驗證位數字為0,若餘數不為0,則驗證位為(10-餘數)。
舉例:IEMI為866696022549032的驗證邏輯如下。
獲得最後的結果為58,58/10餘8,則驗證位為10-8=2。
驗證代碼如下:
public static boolean isIMEI(String imei) {
char[] imeiChar = imei.toCharArray();
int resultInt = 0;
for (int i = 0; i < imeiChar.length-1; 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;
int crc= Integer.parseInt(String.valueOf(imeiChar[14]));
return (resultInt == crc);
}
推薦閱讀: