Контрольне число

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Контрольне число, контрольна цифра, контрольний розряд — різновид контрольної суми, зазвичай додається у кінець довгих номерів для первинної перевірки їхньої правильності. Використовується для зменшення ймовірності помилки при обробці таких номерів: машинному зчитуванні з упаковки товару, записуванні в документи, голосовій передачі тощо.

Наявність і правильність контрольного числа не гарантує достовірність номера, але на практиці достатньо добре запобігає випадковим помилкам.

Контрольне число найчастіше це або остання цифра суми всіх чисел номера, або результат іншої математичної операції над цифрами. У комп'ютерних програмах поняття «контрольного числа» узагальнено до CRC, біта парності і Кодів Ріда-Соломона.

Контрольні числа, зазвичай дозволяють відновити одну загублену цифру за умови, що відомо, на якій позиції в номері вона має перебувати і що всі інші цифри в номері правильні. Якщо відомо, на якій позиції є помилка, потрібно перебрати всі можливі варіанти (наприклад, для 13-значного номера їх буде 13), а з них обрати найбільш ймовірні (виходячи з аналізу змістової інформації в номері).

Використання контрольних чисел у системах нумерації GS1[ред. | ред. код]

Загальний алгоритм розрахунку контрольного числа та контрольної суми[ред. | ред. код]

У системах нумерації GS1 (EAN-13, EAN-8, ITF-14, GS1-128) цифри номера нумеруються справа наліво …n3n2n1, таким же чином, як і відповідні їм коефіцієнти …k3k2k1.

k13 k12 k11 k10 k9  k8  k7  k6  k5  k4  k3  k2  k1 
EAN-13 1 3 1 3 1 3 1 3 1 3 1 3 1
UPC-12
EAN-8

Зазвичай змістова інформація (код країни, товару, банка й т.п.) перебуває в лівій частині номера, а контрольне число (цифра) є завершальним (найправіша) і має номер 1 (n1), однак з математичної точки зору всі цифри коду, як правило, рівноправні, і будь-яка з них може вважатися контрольною для інших. Значення змістової частини номера можна переглянути в описі відповідного коду.

Алгоритм розрахунку контрольного числа:

  1. Помножити цифри номера на відповідні коефіцієнти з таблиці
  2. Знайти суму чисел отриманих на кроці 1
  3. Значення контрольного числа — це найменше число, яке в сумі з числом отриманим на кроці 2 дає число кратне 10

Алгоритм розрахунку контрольної суми:

  1. Помножити цифри номера на відповідні коефіцієнти з таблиці
  2. Знайти суму чисел отриманих на кроці 1
  3. Контрольна сума є залишком від ділення на 10 числа отриманого на кроці 2. Якщо контрольна сума є 0, то номер вважається правильним.

Якщо потрібно підрахувати контрольне число для довільного номеру, то потрібно спочатку поставити «0» на крайню праву позицію, підрахувати контрольну суму, а потім, якщо вона не дорівнює нулю, замінити цей «0» на «10 — контрольна сума».

Приклади обчислення контрольного числа[ред. | ред. код]

Штрих-код EAN-13[ред. | ред. код]

4084500019195 (дезодорант від «Procter & Gamble»)

Крок 1
        +---+---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 4 | 0 | 8 | 4 | 5 | 0 | 0 | 0 | 1 | 9 | 1 | 9 |   | ? |
        +---+---+---+---+---+---+---+---+---+---+---+---+   +---+
          |   |   |   |   |   |   |   |   |   |   |   |
         x1  x3  x1  x3  x1  x3  x1  x3  x1  x3  x1  x3
          |   |   |   |   |   |   |   |   |   |   |   |
         =4  =0  =8 =12  =5  =0  =0  =0  =1 =27  =1 =27

Крок 2    4  +0  +8 +12  +5  +0  +0  +0  +1 +27  +1 +27 = 85

Крок 3   Найменше число, що в сумі з числом 85 дає число кратне 10 це 5 (90 = 85 + 5)

Результат
        +---+---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 4 | 0 | 8 | 4 | 5 | 0 | 0 | 0 | 1 | 9 | 1 | 9 |   | 5 |
        +---+---+---+---+---+---+---+---+---+---+---+---+   +---+

Контрольне число 5, а отже номер правильний.

Штрих-код EAN-8[ред. | ред. код]

40345208 (дитяча присипка «Bübchen»)

Крок 1
        +---+---+---+---+---+---+---+   +---+
        | 4 | 0 | 3 | 4 | 5 | 2 | 0 |   | ? |
        +---+---+---+---+---+---+---+   +---+
          |   |   |   |   |   |   | 
         x3  x1  x3  x1  x3  x1  x3
          |   |   |   |   |   |   |
        =12  =0  =9  =4 =15  =2  =0

Крок 2   12  +0  +9  +4 +15  +2  +0 = 42

Крок 3   Найменше число, що в сумі з числом 42 дає число кратне 10 це 8 (50 = 42 + 8)

Результат
        +---+---+---+---+---+---+---+   +---+
        | 4 | 0 | 3 | 4 | 5 | 2 | 0 |   | 8 |
        +---+---+---+---+---+---+---+   +---+

Контрольне число 8, а отже номер правильний.

Штрих-код UPC-12[ред. | ред. код]

041689300494 (бензин для запальнички «Zippo»)

Крок 1
        +---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 0 | 4 | 1 | 6 | 8 | 9 | 3 | 0 | 0 | 4 | 9 |   | ? |
        +---+---+---+---+---+---+---+---+---+---+---+   +---+
          |   |   |   |   |   |   |   |   |   |   |
         x3  x1  x3  x1  x3  x1  x3  x1  x3  x1  x3
          |   |   |   |   |   |   |   |   |   |   |
         =0  =4  =3  =6 =24  =9  =9  =0  =0  =4 =27

Крок 2    0  +4  +3  +6 +24  +9  +9  +0  +0  +4 +27 = 86

Крок 3   Найменше число, що в сумі з числом 86 дає число кратне 10 це 4 (90 = 86 + 4)

Результат
        +---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 0 | 4 | 1 | 6 | 8 | 9 | 3 | 0 | 0 | 4 | 9 |   | 4 |
        +---+---+---+---+---+---+---+---+---+---+---+   +---+

Контрольне число 4, а отже номер правильний.

Приклад обчислення контрольної суми[ред. | ред. код]

Крок 1
        +---+---+---+---+---+---+---+---+---+---+---+---+---+
        | 5 | 9 | 0 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 5 | 7 |
        +---+---+---+---+---+---+---+---+---+---+---+---+---+
          |   |   |   |   |   |   |   |   |   |   |   |   |
         x1  x3  x1  x3  x1  x3  x1  x3  x1  x3  x1  x3  x1   
          |   |   |   |   |   |   |   |   |   |   |   |   |
         =5 =27  =0  =3  =2  =9  =4  =3  =2  =9  =4 =15  =7

Крок 2    5 +27  +0  +3  +2  +9  +4  +3  +2  +9  +4 +15  +7 = 90

Крок 3   90 / 10 = 0

Контрольна сума 0, а отже номер правильний.

Номери банківських рахунків[ред. | ред. код]

Загальний алгоритм розрахунку контрольного розряду[ред. | ред. код]

Цифри номера нумеруються зліва направо n1n2n3…, таким же чином, як і відповідні їм коефіцієнти k1k2k3

k1 k2 k3 k4 k5  k6  k7  k8  k9  k10  k11 k12 k13 k14 k15  k16  k17  k18  k19  k20  k21  k12  k23 
7 1 3 7 1 3 7 1 3 7 1 3 7 1 3 7 1 3 7 1 3 7 1

Контрольною вважається дев'ята цифра в номері банківського рахунку.

Для розрахунку контрольного розряду використовується наступний алгоритм:

  1. До номеру розрахункового рахунку у початок додати 3 розряди, які відповідають 3-м останнім цифрам БІН банка (банківський індентифікаційний номер). Отримуємо число з 23 розрядів, у якому на 12 місці перебуває контрольний розряд. Якщо потрібно перевірити або розрахувати контрольну цифру кореспондентського рахунку, то для перших трьох розрядів ставиться нуль і дві цифри умовного номера розрахунково-касового центру, яким відповідає п'ята і шоста цифри БІН банка.
  2. У вихідному стані відомі всі цифри, окрім контрольного розряду, він заміняється нулем.
  3. Помножити цифри номера на відповідні коефіцієнти з таблиці
  4. Знайти суму чисел отриманих на кроці 3
  5. Взяти останню цифру від числа отриманого на кроці 4 та помножити на 3. Остання цифра отриманого числа і буде контрольною цифрою

Приклад розрахунку контрольної цифри розрахункового рахунку[ред. | ред. код]

Р/Р 40702810?00000000014, БІН 044544512

Крок 1
        +---+---+---+   +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+
        | 5 | 1 | 2 |   | 4 | 0 | 7 | 0 | 2 | 8 | 1 | 0 |   | ? |   | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 4 |
        +---+---+---+   +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+

Крок 2
        +---+---+---+   +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+
        | 5 | 1 | 2 |   | 4 | 0 | 7 | 0 | 2 | 8 | 1 | 0 |   | 0 |   | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 4 |
        +---+---+---+   +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+

Крок 3
        +---+---+---+   +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+
        | 5 | 1 | 2 |   | 4 | 0 | 7 | 0 | 2 | 8 | 1 | 0 |   | 0 |   | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 4 |
        +---+---+---+   +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+
          |   |   |       |   |   |   |   |   |   |   |       |       |   |   |   |   |   |   |   |   |   |   |  
         x7  x1  x3      x7  x1  x3  x7  x1  x3  x7  x1      x3      x7  x1  x3  x7  x1  x3  x7  x1  x3  x7  x1
          |   |   |       |   |   |   |   |   |   |   |       |       |   |   |   |   |   |   |   |   |   |   |
        =35  =1  =6     =28  =0 =21  =0  =2 =24  =7  =0      =0      =0  =0  =0  =0  =0  =0  =0  =0  =0  =7  =4

Крок 4   35  +1  +6     +28  +0 +21  +0  +2 +24  +7  +0      +0      +0  +0  +0  +0  +0  +0  +0  +0  +0  +7  +4 = 135

Крок 5   Остання цифра з кроку 4 множиться на 3. 5 x 3 = 15. Остання цифра від 15 - це 5, отже контрольне число - 5

Результат
        +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+
        | 4 | 0 | 7 | 0 | 2 | 8 | 1 | 0 |   | 5 |   | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 4 |
        +---+---+---+---+---+---+---+---+   +---+   +---+---+---+---+---+---+---+---+---+---+---+

Отже розрахунковий рахунок матиме вигляд: 40702810500000000014

Перевірка правильності номеру розрахункового рахунку проводиться за тим же алгоритмом. Якщо остання цифра суми, отриманої на кроці 4, дорівнює нулю, то такий номер рахунку вважається правильним.

Номери платіжних карток[ред. | ред. код]

Алгоритм розрахунку[ред. | ред. код]

Нумерація платіжних карток описується стандартом ISO/IEC 7812-1, а для обчислення контрольного числа застосовують алгоритм Луна.

Цифри номера нумеруються справа наліво …n3n2n1, таким же чином, як і відповідні їм коефіцієнти …k3k2k1.

k16 k15 k14 k13 k12 k11 k10 k9 k8  k7  k6  k5  k4  k3  k2  k1 
платіжні картки, 16 цифр 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
платіжні картки, 13 цифр

Контрольною вважається цифра n1 (остання в номері).

Алгоритм Луна:

  1. Цифри номера множаться на коефіцієнти з таблиці, якщо отриманий добуток перевищує 9, то від нього потрібно відняти 9.
  2. Отримані на кроці 1 числа додаються
  3. Число, на яке треба збільшити отриману суму, щоб результат став кратним 10, і буде контрольним числом.

Приклад обчислення контрольного числа банківської картки[ред. | ред. код]

Банківська платіжна картка

6076 6000 0061 9992

Крок 1
        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 6 | 0 | 7 | 6 | 6 | 0 | 0 | 0 | 0 | 0 | 6 | 1 | 9 | 9 | 9 |   | ? |
        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
          |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
         x2  x1  x2  x1  x2  x1  x2  x1  x2  x1  x2  x1  x2  x1  x2
          |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
        =12   | =14   | =12   |   |   |   |   | =12   | =18   | =18
         -9   |  -9   |  -9   |   |   |   |   |  -9   |  -9   |  -9
          |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
         =3  =0  =5  =6  =3  =0  =0  =0  =0  =0  =3  =1  =9  =9  =9

Крок 2    3  +0  +5  +6  +3  +0  +0  +0  +0  +0  +3  +1  +9  +9  +9 = 48

Крок 3   Найменше число, що в сумі з числом 48 дає число кратне 10 це 2 (50 = 48 + 2)

Результат
        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 6 | 0 | 7 | 6 | 6 | 0 | 0 | 0 | 0 | 0 | 6 | 1 | 9 | 9 | 9 |   | 2 |
        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+

Контрольне число 2, а отже номер правильний.

Міжнародний ідентифікаційний код цінного паперу (ISIN)[ред. | ред. код]

Загальний алгоритм розрахунку контрольного числа[ред. | ред. код]

Контрольні суми та контрольні числа для кодів ISIN обчислюються за алгоритмом Луна подібно до розрахунку у випадку банківських платіжних карток. Правило продовження таблиці ліворуч (для довгих номерів) та зменшення її для коротких номерів є очевидним. Загальне правило для швидкого визначення коефіцієнта: парні коефіцієнти дорівнюють 2, непарні — 1. У разі наявності у номері (коді) ISIN латинських літер, кожна з них змінюється на дві цифри, що відповідають порядковому номеру цієї літери у латинській абетці, збільшеному на 9 (тобто A ~ 10, B ~ 11, …, Z ~ 35). Так, букви UA, наприклад, замінюються на 3010.

Приклад обчислення контрольного числа для коду ISIN[ред. | ред. код]

UA4000117501 — Акція проста бездокументарна іменна ПАТ Укрнафта[1]

Крок 1
        +---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 3 | 0 | 1 | 0 | 4 | 0 | 0 | 0 | 1 | 1 | 7 | 5 | 0 |   | ? |
        +---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
          |   |   |   |   |   |   |   |   |   |   |   |   |
         x2  x1  x2  x1  x2  x1  x2  x1  x2  x1  x2  x1  x2 
          |   |   |   |   |   |   |   |   |   |   |   |   | 
          |   |   |   |   |   |   |   |   |   | =14   |   | 
          |   |   |   |   |   |   |   |   |   |  -9   |   |
          |   |   |   |   |   |   |   |   |   |   |   |   | 
         =6  =0  =2  =0  =8  =0  =0  =0  =2  =1  =5  =5  =0

Крок 2    6  +0  +2  +0  +8  +0  +0  +0  +2  +1  +5  +5  +0 = 29

Крок 3   Найменше число, що в сумі з числом 29 дає число кратне 10 це 1 (30 = 29 + 1)

Результат
        +---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+
        | 3 | 0 | 1 | 0 | 4 | 0 | 0 | 0 | 1 | 1 | 7 | 5 | 0 |   | 1 |
        +---+---+---+---+---+---+---+---+---+---+---+---+---+   +---+

Контрольне число 1, а отже номер правильний.

Номери ІНПП[ред. | ред. код]

10-значний номер містить 1 контрольну цифру наприкінці[2]. Контрольне число є залишком від ділення на 11 суми добутків цифр коду на відповідні коефіцієнти з таблиці[джерело?]. Якщо залишок від ділення на 11 дорівнює 10, то старший розряд відкидається і контрольне число буде 0.

k1 k2 k3 k4  k5  k6  k7  k8  k9  k10 
-1 5 7 9 4 6 10 5 7

Приклад:

ІНПП 3184710691 — 10 цифр

Знаходимо суму добутків: 3×(-1) + 1×5 + 8×7 + 4×9 + 7×4 + 1×6 + 0×10 + 6×5 + 9×7 = -3 + 5 + 56 + 36 + 28 + 6 + 0 + 30 + 63 = 221 221 = 20×11 + 1 (залишок від ділення)  Залишок збігається з останньою (контрольною) цифрою наведеного номера, номер правильний.





Примітки[ред. | ред. код]