Change Dir

先知cd——热爱生活是一切艺术的开始

统计

留言簿(18)

积分与排名

“牛”们的博客

各个公司技术

我的链接

淘宝技术

阅读排行榜

评论排行榜

初探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

  1. 从后向前,记录下每隔两位的数字,记为列表A
  2. 从后向前,记录下除A以外的数字,记为列表B
  3. 将A中的数字都乘以2,如果一个数字乘以2后大于10,那么把这个结果拆为两个数字(个位数一个,十位数一个),记为列表A'
  4. 把A'和B中的所有数字求和,记为S
  5. 计算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 阅读(8619) 评论(1)  编辑  收藏 所属分类: 数据翻译

评论

# re: 初探IMEI【译】 2014-12-12 10:39 nieyong

赞,希望可以看到更多翻译文章,加油!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: