Можно ли проверить номер IMEI?

Для приложения мобильного магазина мне нужно проверить номер IMEI . Я знаю, как проверять на основе длины ввода, но является ли их другим механизмом проверки входного номера? Есть ли встроенная функция, которая может достичь этого?

Логика с любого языка принимается и ценится.

    Поиск предполагает, что нет встроенной функции, которая будет проверять номер IMEI, но существует метод проверки с использованием алгоритма Луна .

    Общий процесс:

    1. Вход IMEI: 490154203237518
    2. Снимите последнюю цифру и запомните ее: 49015420323751 & 8 . Последняя цифра 8 – это цифра подтверждения.
    3. Двойная каждая вторая цифра в IMEI: 4 18 0 2 5 8 2 0 3 4 3 14 5 2 (исключая цифру проверки)
    4. Отделите это число на отдельные цифры: 4 1 8 0 2 5 8 2 0 3 4 3 1 4 5 2 (обратите внимание, что 18 и 14 были разделены).
    5. Добавьте все числа: 4+1+8+0+2+5+8+2+0+3+4+3+1+4+5+2 = 52
    6. Возьмите полученное число, запомните его и округлите его до ближайшего кратного десяти: 60 .
    7. Вычтите исходный номер из округленного номера: 60 - 52 = 8 .
    8. Сравните результат с исходной цифрой подтверждения. Если совпадают два числа, ваш IMEI действителен.

    IMEI, указанный в шаге 1 выше, действителен, поскольку число, найденное на шаге 7, равно 8, что соответствует значению валидации.

    Я не верю, что есть встроенные способы аутентификации номера IMEI. Вам нужно будет проверить базу данных сторонних разработчиков (по мнению Google, существует ряд таких услуг, но, по-видимому, они также получают информацию из более централизованных источников).

    Я думаю, что эта логика неверна, потому что это работает только для конкретного IMEI no – 490154203237518, а не для других IMEI нет … Я реализую код также …

     var number = 490154203237518; var array1 = new Array(); var array2 = new Array(); var specialno = 0 ; var sum = 0 ; var finalsum = 0; var cast = number.toString(10).split(''); var finalnumber = ''; if(cast.length == 15){ for(var i=0,n = cast.length; i в var number = 490154203237518; var array1 = new Array(); var array2 = new Array(); var specialno = 0 ; var sum = 0 ; var finalsum = 0; var cast = number.toString(10).split(''); var finalnumber = ''; if(cast.length == 15){ for(var i=0,n = cast.length; i 

    Согласно предыдущему ответу от Karl Nicoll, я создал этот метод на Java.

     public static int validateImei(String imei) { //si la longitud del imei es distinta de 15 es invalido if (imei.length() != 15) return CheckImei.SHORT_IMEI; //si el imei contiene letras es invalido if (!PhoneNumber.allNumbers(imei)) return CheckImei.MALFORMED_IMEI; //obtener el ultimo digito como numero int last = imei.charAt(14) - 48; //duplicar cada segundo digito //sumar cada uno de los digitos resultantes del nuevo imei int curr; int sum = 0; for (int i = 0; i < 14; i++) { curr = imei.charAt(i) - 48; if (i % 2 != 0) sum += duplicateAndSum(curr); else sum += curr; } //redondear al multiplo de 10 superior mas cercano int round = sum % 10 == 0 ? sum : ((sum / 10 + 1) * 10); return (round - sum == last) ? CheckImei.VALID_IMEI_NO_NETWORK : CheckImei.INVALID_IMEI; }