初探IMEI【譯】
一直想清楚的理解IMEI是什么,但是怎么也找不到合適的下筆思路,最終還是把imei.org上的這篇介紹翻譯過來,做個記錄。
原文地址:http://imei.org/2013/05/imei-number-decode/ 原文標題:What Is IMEI Number and How To Decode It
譯文:
“
你可能聽說過IMEI,也知道它是移動設備的標識ID,但是你知道它的具體功用嗎?IMEI自手機出產后就伴隨其一生,究竟什么是IMEI,如何理解它的數字含義?
智能手機是全世界范圍內偷竊事件的“主角”,不要低估IMEI的重要性,把IMEI備份一下是一個明智的決定。本文會解釋為什么我們的手機需要IMEI,同時會列出如何找到并記錄IMEI的技術方法。
IMEI是什么?
IMEI的全稱是International Mobile Equipment Identity,每臺設備都必備的一個唯一標識,用來區分設備與設備。當你購買一臺新的手機設備時,你會在收據上看到IMEI;當你需要修理手機時,手機服務商可能會要求你提供IMEI。標準的IMEI是一個14位數字,同時也有IMEI/SV這樣的16位數字形式(僅新設備有),SV是由軟件設計的。當然蘋果的iPhone GSM有 15位數字,而CDMA是14位數字。不管如何,IMEI的設計動機不僅僅是一個ID標識,它也可以用來阻止網絡訪問,還可以用IMEI來進行運營商解鎖。
如果你的手機失竊,你可以將情況上報到你的手機服務商,他們會阻止這臺手機進行一切的網絡訪問,同時警察也可以通過IMEI來識別丟失的設備。
IMEI怎么查看?
多數手機在你輸入撥號*#06#后就能看到IMEI了,當然也有其他的一些方法:
- iOS:Settings->General->About(設置->通用->關于手機),這樣也可以看到有IMEI(需要自己下滑尋找)。iPhone手機同樣可以在sim卡托盤上找到IMEI,當然如果你不是使用原生的托盤就看不到了。
- Android:Settings->About(設置->關于),這里可以看到IMEI,序列號和其他的信息。
- 老的Sony或者索愛:輸入 * Right * Left Left * Left *
- 新的索愛或者Blackberry:Options->Status(選項->狀態)
你可以使用http://imei.org/check-iphone-carrier/ 服務通過輸入IMEI來獲得手機的運營商信息
如何解釋IMEI:
2004年以來,統一的IMEI格式為:AA-BBBBBB-CCCCCC-D,這是一個15位數字號,其中:
- AA:兩位數字號,表示Reporting Body Identifier,用來表示由TAC(Type Allocation Code)分配的GSMA。
- BBBBBB:TAC(FAC)的剩余部分。
- CCCCCC:機器序列號(SNR)
- D:Luhn 檢測位
舉例來說,現在iPhone 5的TAC為01-332700,而三星的Galaxy S2為35-853704,而C部分的SNR是由手機制造商自定義的生產序列號,最后一位校驗位是通過算法來生成的。
IMEI是手機相關的,與sim卡無關,當你的手機被偷后,無論手機重置還是更換sim卡,IMEI都是不變的,這時你是可以通過聯系你的手機服務商來鎖住手機的服務的。如果這行不通,可以聯系你所在地區的運營商來鎖定IMEI對于運營商網絡的訪問。
有時候IMEI是變化的,盡管這不合法。有些竊賊有能力將合法的新的IMEI安裝到你的手機里從而重新啟用這個手機。另外鑒于犯罪動機,還有人會利用IMEI來監聽設備。
綜上,IMEI是手機的重要的唯一性ID,你需要去備份并記住它。
”
翻譯結束。
最后附加一些說明。
關于TAC:http://en.wikipedia.org/wiki/Type_Allocation_Code
關于最后一位校驗位的算法和python code:
以14位IMEI為例,校驗位假設是C
- 從后向前,記錄下每隔兩位的數字,記為列表A
- 從后向前,記錄下除A以外的數字,記為列表B
- 將A中的數字都乘以2,如果一個數字乘以2后大于10,那么把這個結果拆為兩個數字(個位數一個,十位數一個),記為列表A'
- 把A'和B中的所有數字求和,記為S
- 計算S*9%10,記為F,如果F等于C,校驗通過,否則IMEI有問題。
1: if len(arg0)==15:
2: check_bit = int(arg0[-1])
3: i = len(arg0)-2
4: l,r = [],[]
5: while i>=0:
6: m = int(arg0[i])*2
7: if m<10:
8: l.append(m)
9: else:
10: l.append(m%10)
11: l.append(m/10)
12:
13: r.append(int(arg0[i-1]))
14: i-=2
15: l.reverse()
16: r.reverse()
17: if sum((sum(l),sum(r)))*9%10==check_bit:
18: return True
19: return False
posted on 2014-11-27 17:30 changedi 閱讀(8661) 評論(1) 編輯 收藏 所屬分類: 數據 、翻譯