IMEI校验码算法:
(1).将偶数位数字分别乘以2,分别计算个位数和十位数之和
(2).将奇数位数字相加,再加上上一步算得的值
(3).如果得出的数个位是0则校验位为0,否则为10减去个位数
(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,则最后位为7,所以完整是358901806972417
/// <summary>
/// IMEI校验
/// </summary>
/// <param name="imei">IMEI</param>
/// <returns></returns>
private bool IMEICheck(string imei)
{
int sum1 = 0, sum2 = 0, temp = 0, total = 0, lastNum = 0;
for (int i = 0; i < 14; i++)
{
if ((i % 2) == 0)
{//奇数位
sum1 = sum1 + int.Parse(imei[i].ToString());
}
else
{//偶数位
temp = (int.Parse(imei[i].ToString())) * 2;
if (temp < 10)
{
sum2 = sum2 + temp;
}
else
{
sum2 = sum2 + 1 + temp - 10;
}
}
}
total = sum1 + sum2;
//获取个位数
if ((total % 10) == 0)
{
lastNum = 0;
}
else
{
lastNum = total % 10;
}
//校验
if ((10 - lastNum) != int.Parse(imei[14].ToString()))
return false;
else
return true;
}