Користувач:Alex79/Контрольне число

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

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

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

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

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


Використання контрольних чисел в системах нумерації GS1

[ред. | ред. код]

Загальний алгоритм розрахунку контрольного числа та контрольної суми

[ред. | ред. код]

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

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

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. Помножити цифри номера на відповідні коефіцієнти з таблиці
  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

[ред. | ред. код]

46009333 40345208 (дитяча присипка «Bübchen») — код EAN-8. 4x3+ 0x1+ 3x3+ 4x1+ 5x3+ 2x1+ 0x3+ 8x1= 12+ 0+ 9+ 4+ 15+ 2+ 0+ 8= 50.
Контрольна сума = 0 — номер правильний.
041689300494 (бензин для запальнички «Zippo») — код UPC-12. 0x3+ 4x1+ 1x3+ 6x1+ 8x3+ 9x1+ 3x3+ 0x1+ 0x3+ 4x1+ 9x3+ 4x1= 0+ 4+ 3+ 6+ 24+ 9+ 9+ 0+ 0+ 4+ 27+ 4= 90.

Контрольна сума = 0 — номер правильний.
Відновлення контрольного числа. Дано номер 460154602129?, EAN-13 з утраченою контрольною цифрою «?». Для 4601546021290: 4x1+ 6x3+ 0x1+ 1x3+ 5x1+ 4x3+ 6x1+ 0x3+ 2x1+ 1x3+ 2x1+ 9x3+ 0x1= 4+ 18+ 0+ 3+ 5+ 12+ 6+ 0+ 2+ 3+ 2+ 27+ 0= 82.

Контрольне число — найменьше число, яке при додаванні до обчисленого значення дасть число, кратне 10. У нашому випадку, найближче до «82» кратне «10» число — це «90». До «82» необхідно додати «8» для отримання «90». Отже, контрольне число — «8» за визначенням, а номер, що потрібно було відновити: 4601546021298. Номери банківських рахунків Для розрахунку контрольного розряду банківського рахунку (дев'ята цифра у номері рахунку) використовується наступний алгоритм: до номеру розрахункового рахунку у початок додають 3 розряди, відповідні 3-м останнім цифрам БІН банка (банківський індентифікаційний номер). Отримуємо число з 23 розрядів, у якому на 12 місці перебуває контрольний розряд. Якщо потрібно перевірити або розрахувати контрольну цифру кореспондентського рахунку, то для перших трьох розрядів ставиться нуль ('0') і дві цифри умовного номера розрахунково-касового центру, яким відповідає п'ята і шоста цифри БІН банка.

Приклад розрахунку контрольної цифри розрахункового рахунку: р/р 40702810?00000000014

БІН 044544512

У вихідному стані відомі всі цифри, окрім контрольного розряду, він заміняється нулем. Для розрахунків використовується спеціальний масив вагових коефіцієнтів: 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1.

Обчислюється сума добутків цифри позиції на вагу позиції. Остання цифра цієї суми, помножена на 3, і буде контрольною цифрою. В наведеному прикладі виважена сума рівна 135 = (5×7 + 1×1 + 2×3) + (4×7 + 0×1 + 7×3 + 0×7 + 2×1 + 8×3 + 1×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 1×7 + 4×1). Остання цифра дорівнює 5, при множенні на 3 дає 15. Остання цифра цього числа 5 і є контрольною. Отже розрахунковий рахунок матиме вигляд: 40702810500000000014

Перевірка правильності деякого розрахункового рахунку проводиться за тим же алгоритмом. Якщо остання цифра виваженої суми, отриманої за вищенаведеним алгоритмом, дорівнює нулю, то такий номер рахунку вважається правильним. Таким чином, для заданого прикладу виважена сума становить 150 = (5×7 + 1×1 + 2×3) + (4×7 + 0×1 + 7×3 + 0×7 + 2×1 + 8×3 + 1×7 + 0×1 + 5×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 1×7 + 4×1). Нуль на кінці говорить про правильність.


Номери банківськийх карт American Express, Diners Club і JCB починаються на цифру 3, VISA починається на 4, MasterCard на 5, Maestro на 6. Алгоритм той ж, що і для «Міжнародного ідентифікаційного коду цінної бумаги» (див. нижче)


=== Міжнародний ідентифікаційний код цінного паперу (ISIN) === Контрольні суми обчислюються за подібним алгоритмом. Правило продовження таблиці ліворуч (для довгих номерів) та зменшення її для коротких номерів є очевидним. У разі наявності у номері (коді) ISIN латинських літер, кожна з них заменяється на 2 цифри, відповідні порядковому номеру цієї літери у латинській абетці, збільшеному на 9 (тобто A ~ 10, B ~ 11, …, Z ~ 35). Так, букви UA замінюються на 3010. {| class="standard" !k16 !k15 !k14 !k13 !k12 !k11 !k10 !k9  !k8  !k7  !k6  !k5  !k4  !k3  !k2  !k1  |- align="CENTER" !банківські картки,16 цифр



|2 |1 | rowspan="2" |2 | rowspan="3" |1 | rowspan="3" |2 | rowspan="3" |1 | rowspan="3" |2 | rowspan="3" |1 | rowspan="3" |2 | rowspan="3" |1 | rowspan="3" |2 | rowspan="3" |1 | rowspan="3" |2 | rowspan="3" |1 | rowspan="3" |2 | rowspan="3" |1 |- align="CENTER" !цінні папери

|- align="CENTER" !банківські картки, 13 цифр



|} Контрольна сума. Цифри коду множаться на коефіцієнти з таблиці, якщо отриманий добуток перевищує 9, то від нього потрібно відняти 9. Отримані числа додаються. В цій сумі береться остання цифра, інші відкидаються. Це і буде контрольне число. Якщо контрольне число є 0, то номер визнається правильним. Відновлення «контрольного числа» проводиться аналогічно способу для штрих-коду. Конкретні приклади: 4000-0000-0000-6 — 13-розрядний номер банківської картки Visa. Добутки: 4x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 6x1. Після віднімання 9: 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6. Сума: 10.
Контрольна сума = 0 — номер правильний.
5610-0000-0000-0001 — 16-значна банківська картка Australian Bankcard. Добутки: 5x2, 6x1, 1x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 1x1. Після віднімання 9: 1, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1. Сума: 10.
Контрольна сума = 0 — номер правильний. DE0001136927 — приклад ISIN з сайту Банка Естонії. Букви DE замінюємо на 1314 й отримуємо 14-значний номер 13140001136927. Добутки: 1x2, 3x1, 1x2, 4x1, 0x2, 0x1, 0x2, 1x1, 1x2, 3x1, 6x2, 9x1, 2x2, 7x1. Після віднімання 9: 2, 3, 2, 4, 0, 0, 0, 1, 2, 3, 3, 9(!), 4, 7. Сума: 40.
Контрольна сума = 0 — номер правильний. === Номери ІНПП === 10-значний номер містить 1 контрольну цифру наприкінці. {| class="standard" !k1 !k2 !k3 !k4  !k5  !k6  !k7  !k8  !k9  !k10  !k11  !k12  |- align="CENTER" !10-значний ІНПП | -1 |5 |7 |9 |4 |6 |10 |5 |7 |
|- align="CENTER" |- align="CENTER" |} Контрольне число є залишком від ділення на 11 суми добутків цифр коду на відповідні коефіцієнти з теблиці. Якщо залишок від ділення дорівнює 10, то старший роздряд відкидається і контрольне число буде 0. Конкретний приклад:

ІНПП 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 (залишок від ділення)  Залишок збігається з останньою (контрольною) цифрою наведеного номера, номер правильний.





Код ЄДРПОУ дозволяє легко визначити підприємство або організацію в Україні. Складається з 8 цифр, остання з яких є контрольною. Контрольне число розраховується аналогічно алгоритму для ідентифікаційного номеру платника податків. Тобто знаходиться виважена сума добутків, яка потім ділиться на 11. Залишок від ділення і буде контрольним числом.  ТАБЛИЦЯ коефіцієнтів Якщо в залишку буде число 10, то коефіцієнти в таблиці збільшуються на 2 ТАБЛИЦЯ2 Приклад перевірки для коду 39292197 (Державна фіскальна служба України): Сума добутків:  3×7 + 9×1 + 2×2 + 9×3 + 2×4 + 1×5 + 9×6 = 21 + 9 + 4 + 27 + 8 + 5 + 54 = 128. 128 = 11×11 + 7; Решта від ділення отриманої суми на 11 дорівнює 7. Контрольна цифра коду — 7 (остання цифра). Отже, контрольне число збігається з контрольно цифрою, номер правильний. === Номер ISBN === Примітка! Згідно стандарту ISO 2108:2005 новим виданням присвоюються лише 13-значні ISBN. Контрольна цифра 13-значного ISBN обчислюється за тим же алгоритмом, що і контрольна цифра штрих-коду EAN-13 (описаний вище). Наступний текст відноситься до 10-значних номерів ISBN. ISBN має 10 цифр, ISSN — 8 цифр. Остання цифра — контрольна. У випадку, якщо замість останньої цифри стоїть буква «X», то при обчисленні контрольної суми вона замінюється на число 10. {| class="standard" !k10 !k9  !k8  !k7  !k6  !k5  !k4  !k3  !k2  !k1  |- align="CENTER" !ISBN,10 цифр

|10 |9 | rowspan="2" |8 | rowspan="2" |7 | rowspan="2" |6 | rowspan="2" |5 | rowspan="2" |4 | rowspan="2" |3 | rowspan="2" |2 | rowspan="2" |1 |- align="CENTER" !ISSN,8 цифр

|} Контрольна сума є залишок від ділення на 11 суми з цифр номера, помножених на відповідні коефіцієнти з таблиці. Якщо контрольна сума є 0, то номер визнається правильним. Відновлення «контрольного числа» аналогічно способу для штрих-коду, однак замість «0» потрібно підставити цифру 11 — контрольна сума. Якщо контрольна сума рівна 1, то підставити цифру 10, тобто букву «X». При нанесенні ISBN на книгу у вигляді штрих-коду власна контрольна цифра видаляється, а зліва дописується префікс 978 (або 979, цей префікс поки не використовується). Прі нанесенні ISSN на журнал у вигляді штрих-коду власна контрольна цифра видаляється, зліва дописується префикс 977, а праворуч — 2 цифри, що несуть дяку додаткову інформацію, що не міститься безпосередньо у ISSN (зазвичай 00 для платних накладів). Далі, (в обох випадках) праворуч  дописується контрольна цифра, обчислена за 13-значним алгоритмом для штрих-коду. Конкретний приклад:

ISBN 966-03-2083-3 (книга — Глушаков С. В., Коваль А. В., Смирнов С. В. Язык программирования C++ — Х.: Фолио, 2000.) 9×10 + 6×9 + 6×8 + 0×7 + 3×6 + 2×5 + 0×4 + 8×3 + 3×2 + 3×1 = 90 + 54 + 48 + 0 + 18 + 10 + 0 + 24 + 6 + 3 = 253 253 = 23 × 11 + 0(залишок).
Контрольна сума (залишок) = 0 — номер правильний.
ISBN 0-446-52087-X (книга — E.Gordeeva. «My Sergei», A Time Warner Company.) 0×10 + 4×9 + 4×8 + 6×7 + 5×6 + 2×5 + 0×4 + 8×3 + 7×2 + 10×1 = 0 + 36 + 32 + 42 + 30 + 10 + 0 + 24 + 14 + 10 = 198 = 18×11 + 0(залишок).
Контрольна сума (решта) = 0 — номер правильний.
ISSN 2071-0194 (журнал — «Український фізичний журнал») 2×8 + 0×7 + 7×6 + 1×5 + 0×4 + 1×3 + 9×2 + 4×1 = 16 + 0 + 42 + 5 + 0 + 3 + 18 + 4 = 88 = 8×11 + 0(залишок).
Контрольна сума (залишок) = 0 — номер правильний.
=== Ідентифікаційний номер транспортного засобу (VIN) === Стандарт ISO 3779-1983, що визначає структуру VIN транспортного засобу, рекомендує у 9-й позиції VIN розміщувати контрольну суму — число, обчислене за визначеним у стандарті алгоритмом, чиє значення залежить від значень всіх інших знаків у VIN. У разі використання у 9-й позиції контрольної суми там допускаються такі значення: числа 0…9 або X. Якщо у 9-й позиції перебуває будь-який інший знак, то такий VIN не пройде перевірку. Якщо це VIN автомобіля, призначеного для північно-американського ринку, то він або переписаний з автомобіля з помилками або перебитий. Приклад розрахунку контрольної суми: 1. Для VIN вигляду JHMCM56557C404453 потрібно заповнити таблицю нижче: {| class="wikitable" | Позиція VIN | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | CHK | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |- | VIN | J | H | M | C | M | 5 | 6 | 5 | 5 | 7 | З | 4 | 0 | 4 | 4 | 5 | 3 |} 2. Замінити букви на цифри у відповідності з таблицею: {| class="wikitable" | Буква | A | B | C | D | E | F | G | H | J | K | L | M | N | P | R | S | T | U | V | W | X | Y | Z |- | Цифровий еквівалент | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 7 | 9 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |} 3. Заповнити таблицю нижче, де для кожного знаку VIN вказана його «вага»: {| class="wikitable" | Позиція VIN | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |- | Вага | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 10 | CHK | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |- | Цифровий еквівалент | 1 | 8 | 4 | 3 | 4 | 5 | 6 | 5 | CHK | 7 | 3 | 4 | 0 | 4 | 4 | 5 | 3 |} 4. Складаємо добуток кожного знаку VIN на його «вагу»: 18 + 87 + 46 + 35 + 44 + 53 + 62 + 510 + 79 + 38 + 47 + 06 + 45 + 44 + 53 + 32 = 368 5. Обчислюємо залишок від ділення отриманої суми на 11: 368 = 33×11 + 5 (решта) Це число і буде контрольною цифрою, яка записується у дев'ятий знак VIN: Якщо залишок від ділення дорівнює 10, то у 9-й позиції VIN записує «X» (римська 10).

Примітки

[ред. | ред. код]