Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

IMEI以及MEID解析和生成

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

0.基础知识: 

IMEI是国际移动通讯设备识别号(International Mobile Equipment Identity)的缩写,用于GSM系统。

由15位数字组成,前6位(TAC)是型号核准号码,代表手机类型。接着2位(FAC)是最后装配号,代表产地。后6位(SNR)是串号,代表生产顺序号。最后1位(SP)是检验码。

(欧洲型号认证中心今年重新分配了IMEI,FAC被和TAC合并在一起,FAC码的数字统一从00开始,因此无论什么型号什么品牌其7,8位均是00、01、02或03这样向后编排)



MEID是移动通讯设备识别号(Mobile Equipment IDentifier)的缩写,用于CDMA系统。

由15位16进制数字组成(一般使用前14位),前8位是生产商编号,后6位是串号,最后1位是检验码。



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

MEID校验码算法:
(1).将偶数位数字分别乘以2,分别计算个位数和十位数之和,注意是16进制数
(2).将奇数位数字相加,再加上上一步算得的值
(3).如果得出的数个位是0则校验位为0,否则为10(这里的10是16进制)减去个位数
如:AF 01 23 45 0A BC DE 偶数位乘以2得到F*2=1E 1*2=02 3*2=06 5*2=0A A*2=14 C*2=18 E*2=1C,计算奇数位数字之和和偶数位个位十位之和,得到 A+(1+E)+0+2+2+6+4+A+0+(1+4)+B+(1+8)+D+(1+C)=64 => 校验位 10-4 = C



IMEI举例:

小米Note: 866032 02 129870 4.

华为Note:869819 02 084146 9

效验位符合以上算法。

 

 

 

  private static String getimei15(String imei){ 
        if (imei.length() == 14) { 
            char[] imeiChar=imei.toCharArray();   
            int resultInt=0;   
            for (int i = 0; i < imeiChar.length; i++) {   
                int a=Integer.parseInt(String.valueOf(imeiChar[i]));   
                i++;   
                final int temp=Integer.parseInt(String.valueOf(imeiChar[i]))*2;   
                final int b=temp<</span>10?temp:temp-9;   
                resultInt+=a+b;   
            }   
            resultInt%=10;   
            resultInt=resultInt==0?0:10-resultInt;   
            return resultInt + ""; 
        }else{ 
            return ""; 
        } 
    }


 

Viewing all articles
Browse latest Browse all 158

Trending Articles