15位MEID验证算法

来源:互联网 发布:手机做表格软件 编辑:程序博客网 时间:2024/06/07 07:20
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


/// <summary>        /// MEID校验        /// </summary>        /// <param name="meid">MEID</param>        /// <returns></returns>        private bool GetMEIDCheckDigit(string meid)        {            meid = meid.ToLower();            String[] myStr = { "a", "b", "c", "d", "e", "f" };            int sum = 0;            string lastNum;            for (int i = 0; i < 14; i++)            {                String param = meid.Substring(i, 1);                for (int j = 0; j < myStr.Length; j++)                {                    if (param.Equals(myStr[j]))                    {                        param = "1" + j.ToString();                        break;                    }                }                if (i % 2 == 0)                {                    sum = sum + int.Parse(param);                }                else                {                    sum = sum + 2 * int.Parse(param) % 16;                    sum = sum + 2 * int.Parse(param) / 16;                }            }            if (sum % 16 == 0)            {                lastNum = "0";            }            else            {                int result = 16 - sum % 16;                if (result > 9)                {                    result += 65 - 10;                }                lastNum = result.ToString();            }              //将得出的检验码转换成16进制进行校验            if (Convert.ToString(int.Parse(lastNum), 16).ToUpper() != meid[14].ToString())                return false;            else                return true;        }



原创粉丝点击