Wpisany przez Tomasz Lubiński,
21 września 2006 00:06
Code 93 został zaprojektowany jako udoskonalenie kodowania Code 39. Podobnie jak swój pierwowzór w wersji podstawowej jest w stanie przechowywac 43 znaki alfanumeryczne. Jednak w stosunku do swojego poprzednika posiada jeszcze 4 dodatkowe znaki sterujące (zaznaczone na czerwono, używame w wersji rozszerzonej). Wersja rozszerzona - Extended Code 93 jest w stanie przechowywać cały zbiór ASCII 128. Wynikowy Code 93 jest też bardziej gęsty - przez co krótszy od swojego pierwowzoru. Został on też wyposażony w dwie cyfry sumy kontrolnej "C" oraz "K". Długość kodowanego ciągu jest dowolna.
Tabela kodowania znaków - 0 oznacza biały pasek, 1 oznacza czarny pasek. Jak widać w tabeli poniżej, każde 9 zer i jedynek tworzy 3 czarne paski. Stąd nazwa kodowania Code 9 of 3.
Suma kontrolna C jest to suma ważona wszystkich kodowanych znaków. Wartości wag wynoszą: 1 dla ostatniego kodowanego znaku, 2 dla przedostatniego, itd... do 20. Po wadze 20 zaczynamy znów liczyć od 1. Całość dzielimy modulo 47. Wynik jest sumą kontrolną C.
Suma kontrolna K jest liczona analogicznie jak suma C, z tą różnicą, że wagi zmieniają się od 1 do 15, a ostatnim kodowanym znakiem jest suma kontrolna C.
Zakodujmy więc napis ALGORYTM.ORG
Najpierw znak początku - "*" 101011110
następnie "A" 110101000
"L" 101011000
"G" 101101000
"O" 100101100
"R" 110110010
"Y" 100110110
"T" 110100110
"M" 101001100
"." 111010100
"O" 100101100
"R" 110110010
"G" 101101000
Teraz suma kontrolna C: 10 * 12 + 21 * 11 + 16 * 10 + 24 * 9 + 27 * 8 + 34 * 7 + 29 * 6 + 22 * 5 + 37 * 4 + 24 * 3 + 27 * 2 + 16 * 1 = 120 + 231 + 160 + 216 + 216 + 238 + 174 + 110 + 148 + 72 + 54 + 16 = 1755 mod 47 = 16 - 101101000
Teraz suma kontrolna K: 10 * 13 + 21 * 12 + 16 * 11 + 24 * 10 + 27 * 9 + 34 * 8 + 29 * 7 + 22 * 6 + 37 * 5 + 24 * 4 + 27 * 3 + 16 * 2 + 16 * 1 = 130 + 252 + 176 + 240 + 243 + 272 + 203 + 132 + 185 + 96 + 81 + 32 + 16 = 2058 mod 47 = 37 - 111010100
znak końca - "*" 101011110
i końcowa kreska - 1
Ostateczny wynik to:
101011110110101000101011000101101000100101100110110010100110110110100110
1010011001110101001001011001101100101011010001011010001110101001010111101
co po zapisaniu wszystkiego w wersji graficznej daje nam:
Tabela kodowania znaków - 0 oznacza biały pasek, 1 oznacza czarny pasek. Jak widać w tabeli poniżej, każde 9 zer i jedynek tworzy 3 czarne paski. Stąd nazwa kodowania Code 9 of 3.
Wartość | Znak | Kodowanie | Wartość | Znak | Kodowanie |
0 | 0 | 100010100 | 24 | O | 100101100 |
1 | 1 | 101001000 | 25 | P | 100010110 |
2 | 2 | 101000100 | 26 | Q | 110110100 |
3 | 3 | 101000010 | 27 | R | 110110010 |
4 | 4 | 100101000 | 28 | S | 110101100 |
5 | 5 | 100100100 | 29 | T | 110100110 |
6 | 6 | 100100010 | 30 | U | 110010110 |
7 | 7 | 101010000 | 31 | V | 110011010 |
8 | 8 | 100010010 | 32 | W | 101101100 |
9 | 9 | 100001010 | 33 | X | 101100110 |
10 | A | 110101000 | 34 | Y | 100110110 |
11 | B | 110100100 | 35 | Z | 100111010 |
12 | C | 110100010 | 36 | - | 100101110 |
13 | D | 110010100 | 37 | . | 111010100 |
14 | E | 110010010 | 38 | spacja | 111010010 |
15 | F | 110001010 | 39 | $ | 111001010 |
16 | G | 101101000 | 40 | / | 101101110 |
17 | H | 101100100 | 41 | + | 101110110 |
18 | I | 101100010 | 42 | % | 110101110 |
19 | J | 100110100 | 43 | ($) | 100100110 |
20 | K | 100011010 | 44 | (%) | 111011010 |
21 | L | 101011000 | 45 | (/) | 111010110 |
22 | M | 101001100 | 46 | (+) | 100110010 |
23 | N | 101000110 | - | * Start/Stop | 101011110 |
- Kodowany ciąg ma następującą budowę:
- znak początku - "*"
- kodowany ciąg
- suma kontrolna C
- suma kontrolna K
- znak końca - "*"
- końcowa pojedyńcza kreska - 1
Suma kontrolna C jest to suma ważona wszystkich kodowanych znaków. Wartości wag wynoszą: 1 dla ostatniego kodowanego znaku, 2 dla przedostatniego, itd... do 20. Po wadze 20 zaczynamy znów liczyć od 1. Całość dzielimy modulo 47. Wynik jest sumą kontrolną C.
Suma kontrolna K jest liczona analogicznie jak suma C, z tą różnicą, że wagi zmieniają się od 1 do 15, a ostatnim kodowanym znakiem jest suma kontrolna C.
Przykład:
Zakodujmy więc napis ALGORYTM.ORG
Najpierw znak początku - "*" 101011110
następnie "A" 110101000
"L" 101011000
"G" 101101000
"O" 100101100
"R" 110110010
"Y" 100110110
"T" 110100110
"M" 101001100
"." 111010100
"O" 100101100
"R" 110110010
"G" 101101000
Teraz suma kontrolna C: 10 * 12 + 21 * 11 + 16 * 10 + 24 * 9 + 27 * 8 + 34 * 7 + 29 * 6 + 22 * 5 + 37 * 4 + 24 * 3 + 27 * 2 + 16 * 1 = 120 + 231 + 160 + 216 + 216 + 238 + 174 + 110 + 148 + 72 + 54 + 16 = 1755 mod 47 = 16 - 101101000
Teraz suma kontrolna K: 10 * 13 + 21 * 12 + 16 * 11 + 24 * 10 + 27 * 9 + 34 * 8 + 29 * 7 + 22 * 6 + 37 * 5 + 24 * 4 + 27 * 3 + 16 * 2 + 16 * 1 = 130 + 252 + 176 + 240 + 243 + 272 + 203 + 132 + 185 + 96 + 81 + 32 + 16 = 2058 mod 47 = 37 - 111010100
znak końca - "*" 101011110
i końcowa kreska - 1
Ostateczny wynik to:
101011110110101000101011000101101000100101100110110010100110110110100110
1010011001110101001001011001101100101011010001011010001110101001010111101
co po zapisaniu wszystkiego w wersji graficznej daje nam:
Przykład w JavaScript
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | C# | Microsoft Visual Studio 2010 | .cs | .cs | ***** / 0 |
Tomasz Lubiński | C/C++ | Borland Builder 6 | .cpp | .cpp | ***** / 1 |
Tomasz Lubiński | Delphi/Pascal | Borland Delphi 5 | .pas | .pas | ***** / 2 |
Tomasz Lubiński | Java | .java | .java | ***** / 2 | |
Tomasz Lubiński | JavaScript | Firefox 3.0+, Safari 3.0+, Chrome 3.0+, Opera 9.5+, IE 9.0+ | .js | .js | ***** / 0 |
Poprawiony: 29 sierpnia 2012 18:35