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

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

обчислення

У цій статті ми розповімо про те, як перевірити коректність IMEI. 15-та цифра IMEI є так званим контрольним числом, яке дозволяє перевірити правильність решти всіх цифр. Відповідно до Вікіпедії, існує два основних способи його розрахунку, нижче ми наведемо суть цих способів, а також приклад реалізації розрахунку контрольної суми IMEI та перевірки його коректності кількома мовами програмування.

Спосіб 1.

Для розрахунку останньої цифри IMEI необхідно:

  1. Скласти всі цифри у непарних положеннях;
  2. Замінити цифри на парних місцях за формулою та скласти їх: 0=0 1=2 2=4 3=6 4=8 5=1 6=3 7=5 8=7 9=9
  3. До отриманого числа додати результат, отриманий п.1.;
  4. Якщо отримане число дорівнює нулю або кратно 10, тоді контрольне число IMEI дорівнює 0. В іншому випадку контрольна сума дорівнює числу, яке потрібно додати до результату, щоб отримати найближче «кругле» число.
Методика розрахунку Check Digit з прикладу: Нижче ми з Вами спробуємо розрахувати контрольне число CD для IMEI=354190023896443. Для цього нам необхідно виконати такі операції з нашим кодом IMEI:
  1. Скласти всі цифри в непарних положеннях 3,4,9,0,3,9,4: 3+4+9+0+3+9+4 = 32
  2. Замінити цифри на парних місцях 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
  3. До отриманого числа 25 додати результат 32 отриманий в п.1. 25 + 32 = 57
  4. "Якщо отримане число дорівнює нулю або кратно 10, тоді контрольне число IMEI одно 0" - це не цей випадок. В іншому (=нашому) випадкуконтрольна сума дорівнює числу, яке потрібно додати до результату, щоб отримати найближче «кругле» число (тобто наступний цілий десяток). Наступний цілий десяток = 60. До результату 57 треба додати 3 , щоб отримати найближче «кругле» число 60.
  5. Контрольне число = 3

Спосіб 2.

  1. Подвоїти значення цифр на парних позиціях (5,1,0,2,8,6,4).
  2. Скласти разом подвоєні числа на парних позиціях і парних позиціях, при цьому «розкладаючи» числа на парних позиціях на складові числа (наприклад, 14 потрібно подати як 1 і 4). Отримали 57
  3. Якщо кінцеве число закінчується на 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.