手机解密基础知识-IMEI和IMEISV

组成

IMEI = TAC + FAC + SNR + CD

IMEI = International Mobile station Equipment Identity 国际移动设备识别码  6位 
TAC  = Type Approval Code  类型批准码  2位 
FAC  = Final Assembly Code  最终装配码 2位 
SNR  = Serial Number  序列号    6位 
CD   = Check Digit   校验数字    1位

IMEISV = TAC + FAC + SNR + CD + SVN

IMEISV = International Mobile station Equipment Identity and Software Version Number

TAC  = Type Approval Code 
FAC  = Final Assembly Code 
SNR  = Serial Number 
CD   = Check Digit 
SVN  = Software Version Number 2位

一段VB代码,有时间的话,转成C
 

Private Function IMEICRC()

Dim i As Integer 
Dim flag As Integer 
Dim checksum As Integer

‘Hehe im not writing a tutorial in vb source comments, 
‘read the .txt with this for imei algo…

For i = 1 To 14          ‘Loop for IMEI checksum calculation algorithm 
If Mid(IMEI, i, 1) = 0 Then 
If flag = 0 Then 
flag = 1 
Else 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 1 Then 
If flag = 0 Then 
checksum = checksum + 9 
flag = 1 
Else 
checksum = checksum + 8 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 2 Then 
If flag = 0 Then 
checksum = checksum + 8 
flag = 1 
Else 
checksum = checksum + 6 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 3 Then 
If flag = 0 Then 
checksum = checksum + 7 
flag = 1 
Else 
checksum = checksum + 4 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 4 Then 
If flag = 0 Then 
checksum = checksum + 6 
flag = 1 
Else 
checksum = checksum + 2 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 5 Then 
If flag = 0 Then 
checksum = checksum + 5 
flag = 1 
Else 
checksum = checksum + 9 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 6 Then 
If flag = 0 Then 
checksum = checksum + 4 
flag = 1 
Else 
checksum = checksum + 7 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 7 Then 
If flag = 0 Then 
checksum = checksum + 3 
flag = 1 
Else 
checksum = checksum + 5 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 8 Then 
If flag = 0 Then 
checksum = checksum + 2 
flag = 1 
Else 
checksum = checksum + 3 
flag = 0 
End If 
End If

If Mid(IMEI, i, 1) = 9 Then 
If flag = 0 Then 
checksum = checksum + 1 
flag = 1 
Else 
checksum = checksum + 1 
flag = 0 
End If 
End If

Next i                     ‘loop while i is not 14

Do While checksum >= 10    ‘ because we _disibledevent= checksum – 10

Loop

If checksum = Int(Mid(IMEI, 15, 1)) Then 
IMEICRC = True 
Else 
IMEICRC = False 
End If

end function

改成了C版本,一个是用公式,一个是查表,  都没有做严格的数据检查

int check(char *imei) 

int   i , c; 
int checksum = 0; 
for (i=0;  i<14;  i++) { 
c = imei[i]-0×30; 
if (i%2 == 0) { 
checksum += (10-c); 
} else { 
if (c<=4) { 
checksum += (10-2*c); 
} else { 
checksum += 19-2*c; 


checksum %= 10; 

return checksum; 
}

 

下面是查表的版本

int even[10] = {10, 9, 8, 7, 6,  5, 4, 3, 2, 1}; 
int odd[10]  = {10, 8, 6, 4, 2,  9, 7, 5, 3, 1};

int check2(char *imei) 

    int i,c; 
    int checksum = 0; 
    for (i=0; i<14; i++) { 
        c = imei[i] – ‘0′; 
        if (0 == i%2) { 
            checksum += even[c]; 
        } else { 
           checksum += odd[c]; 
        } 
        checksum %= 10; 
    }

    return checksum; 
}

还是C实现起来,简洁明了一些
出处:http://zhiwei.li/text/2009/07/imei%e5%92%8cimeisv/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值