IMEI验证Java将字符串转换为长时间丢失的前导0

时间:2019-04-29 14:03:42

标签: java imei

我正在尝试使用下面的代码验证IMEI编号,用户将在页面上输入其编号,然后使用转换为long的字符串运行isValidIMEI

现在这确实适用于我遇到的几乎所有IMEI,但是对于一些iPhone 5,它们的前导0,例如0133xxxxxxxxxx0。当将其强制转换为长整数时,前导0丢失,因此它变为14位数字并失败,如果我关闭长度检查器,此操作仍将不起作用,因为它将使错误的数字翻倍。

有什么主意我可以转换为某种数字格式,但保持前导0?

/**
 * Sum digits
 *
 * @param n
 * @return
 */
private static int sumDig(int n)
{
    int a = 0;
    while (n > 0)
    {
        a = a + n % 10;
        n = n / 10;
    }
    return a;
}

/**
 * Is valid imei
 *
 * @param n
 * @return
 */
public boolean isValidIMEI(long n)
{
    // Converting the number into String
    // for finding length
    String s = Long.toString(n);
    int len = s.length();

    Log.v("IMEIValidation", s);

    if (len != 15) {
        Log.v("IMEIValidation", "Length issue");
        return false;
    }

    int sum = 0;
    for (int i = len; i >= 1; i--)
    {
        int d = (int)(n % 10);

        // Doubling every alternate digit
        if (i % 2 == 0)
            d = 2 * d;

        // Finding sum of the digits
        sum += sumDig(d);
        n = n / 10;
    }

    Log.v("IMEIValidation", String.valueOf(sum));


    Log.v("IMEIValidation", String.valueOf(sum % 10));
    return (sum % 10 == 0);
}

0 个答案:

没有答案