Обчислення контрольного числа IMEI
Обчислення контрольного числа IMEI

У цій статті ми розповімо про те, як перевірити коректність IMEI. 15-та цифра IMEI є так званим контрольним числом, яке дозволяє перевірити правильність решти всіх цифр. Відповідно до Вікіпедії, існує два основних способи його розрахунку, нижче ми наведемо суть цих способів, а також приклад реалізації розрахунку контрольної суми IMEI та перевірки його коректності кількома мовами програмування.
Спосіб 1.
Для розрахунку останньої цифри IMEI необхідно:
- Скласти всі цифри у непарних положеннях;
- Замінити цифри на парних місцях за формулою та скласти їх: 0=0 1=2 2=4 3=6 4=8 5=1 6=3 7=5 8=7 9=9
- До отриманого числа додати результат, отриманий п.1.;
- Якщо отримане число дорівнює нулю або кратно 10, тоді контрольне число IMEI дорівнює 0. В іншому випадку контрольна сума дорівнює числу, яке потрібно додати до результату, щоб отримати найближче «кругле» число.
- Скласти всі цифри в непарних положеннях 3,4,9,0,3,9,4: 3+4+9+0+3+9+4 = 32
- Замінити цифри на парних місцях 5,1,0,2,8,6,4 за формулою 0=>0, 1=>2, 2=>4, 3=>6, 4=>8, 5=>1, 6=>3, 7=>5, 8=>7, 9=>9 : 5,1,0,2,8,6,4 => 1,2,0,4,7,3,8 і скласти їх: 1+2+0+4+7+3+8 = 25
- До отриманого числа 25 додати результат 32 отриманий в п.1. 25 + 32 = 57
- "Якщо отримане число дорівнює нулю або кратно 10, тоді контрольне число IMEI одно 0" - це не цей випадок. В іншому (=нашому) випадкуконтрольна сума дорівнює числу, яке потрібно додати до результату, щоб отримати найближче «кругле» число (тобто наступний цілий десяток). Наступний цілий десяток = 60. До результату 57 треба додати 3 , щоб отримати найближче «кругле» число 60.
- Контрольне число = 3
Спосіб 2.
- Подвоїти значення цифр на парних позиціях (5,1,0,2,8,6,4).
- Скласти разом подвоєні числа на парних позиціях і парних позиціях, при цьому «розкладаючи» числа на парних позиціях на складові числа (наприклад, 14 потрібно подати як 1 і 4). Отримали 57
- Якщо кінцеве число закінчується на 0, то CD = 0. В іншому випадку CD дорівнює числу, яке потрібно додати до результату, отриманого в пункті 2, щоб отримати наступний десяток. Наступний десяток після 57 це 60, 60-57 отримуємо 3. Разом контрольне число дорівнює 3.
Нижче наведено реалізацію цього алгоритму мовою PHP:
Реалізація алгоритму розрахунку контрольної суми IMEI мовою PHP
Тут функціяcalc_imei обчислює контрольну суму останнього розряду IMEI за другим способом, а функціяvalidate_imei перевіряє його коректність. Розглянемо використання цих функцій вже на розглянутому прикладі:
Результатом виконання наведеного вище коду буде:
Тобто, як ми бачимо, IMEI 354190023896443 є коректним, а IMEI 354190023896440 – ні, розрахована правильна контрольна цифра (check digit) – для нього 3.