找回密码
 注册
搜索
查看: 2330|回复: 6

如何计算手机IMEI号的最后一位即校验位

[复制链接]
发表于 2008-12-9 19:35:37 | 显示全部楼层 |阅读模式
各位大侠:
如何计算手机IMEI号的最后一位即校验位
用什么公式
发表于 2008-12-9 21:17:51 | 显示全部楼层
有工具[em01]
点评回复

使用道具 举报

 楼主| 发表于 2008-12-12 08:26:25 | 显示全部楼层
我自已想写一个工具,但是不知道算法!
点评回复

使用道具 举报

发表于 2008-12-18 09:43:44 | 显示全部楼层
很简单,这是我写的VC程序部分的这个函数,输入是14位IMEI,返回就是15位

int getLastIMEIdigit(CString strIMEI)
{
        int imei1 = (strIMEI[0]-'0');
        int imei2 = 2*(strIMEI[1]-'0');
        int imei3 = (strIMEI[2]-'0');
        int imei4 = 2*(strIMEI[3]-'0');
        int imei5 = (strIMEI[4]-'0');
        int imei6 = 2*(strIMEI[5]-'0');
        int imei7 = (strIMEI[6]-'0');
        int imei8 = 2*(strIMEI[7]-'0');
        int imei9 = (strIMEI[8]-'0');
        int imei10 = 2*(strIMEI[9]-'0');
        int imei11 = (strIMEI[10]-'0');
        int imei12 = 2*(strIMEI[11]-'0');
        int imei13 = (strIMEI[12]-'0');
        int imei14 = 2*(strIMEI[13]-'0');

        int ret = imei1 +
                      (imei2/10)+
                          (imei2%10)+
                          imei3+
                          (imei4/10)+
                          (imei4%10)+
                          imei5+
                          (imei6/10)+
                          (imei6%10)+
                          imei7+
                          (imei8/10)+
                          (imei8%10)+
                          imei9+
                          (imei10/10)+
                          (imei10%10)+
                          imei11+
                          (imei12/10)+
                          (imei12%10)+
                          imei13+
                          (imei14/10)+
                          (imei14%10);

        return (10 - ret % 10) % 10;
}
点评回复

使用道具 举报

 楼主| 发表于 2008-12-23 08:34:02 | 显示全部楼层
非常感谢你的支持
点评回复

使用道具 举报

发表于 2008-12-31 17:42:12 | 显示全部楼层
你该去读读GSM协议了,上面都有
点评回复

使用道具 举报

发表于 2009-1-8 14:31:20 | 显示全部楼层
/* compute last digit of IMEI */
char ComputeCD(CString imei)
{
        char buf[14];
        int i,cd = 0;
        // copy imei to char array
        for(i=0;i<14;i++)
                buf = imei.GetAt(i) - 0x30;

        // compute
        for(i=0;i<14;i++)
        {
                if(i%2 == 1)
                {
                        buf *= 2;
                        if(buf < 10)
                                cd += buf;
                        else
                                cd = cd + (buf % 10) + (buf - (buf % 10))/10;
                }
                else
                        cd += buf;
        }

        // return cd value
        if(cd % 10 == 0)
                return 0;
        else
                return (10 - (cd % 10));
}
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-29 13:45 , Processed in 0.052049 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表