Wpisany przez Tomasz Lubiński,
14 września 2006 18:59
Code 39 mod 43 (Code 3 of 9) jest alfanumerycznym kodem kreskowym, wzbogaconym w stosunku do zwykłego Code 39 o sumę kontrolną. Został on zaprojektowany by przechowywać 26 wielkie litery, 10 cyfr i 7 znaków specjalnych. Szerszą gamę znaków może przechowywać rozszerzony Code 39 mod 43 (ang. Extended Code 39). Dlugość kodowanego ciągu jest dowolna.
Każdy znak kodowany jest przez 5 czarnych kresek (ang. bar) i 4 odstępy pomiędzy nimi (ang. space). W sumie daje nam to 9 elementów. Każdy taki element może być szeroki (ang. wide) bądź wąski (ang. narrow), przy czym dla każdego znaku 3 z 9 elementów są szerokie a pozostałe wąskie - stąd pierwsza część nazwy kodowania Code 3 of 9. Druga mod 43 pochodzi od sposobu obliczania sumy kontrolnej. Dodajemy do siebie wartości wszystkich znaków występujących w kodowanym ciągu, a następnie wynik dzielimy modulo 43, jako sumę kontrolną wybieramy znak o otrzymanej wartości.
Tabela kodowania znaków: (N - oznacza wąski, W - oznacza szeroki), pierwszy znak oznacza czarną kreskę, drugi wolną przestrzeń, trzeci kolejną kreskę, czwarty kolejną wolną przestrzeń, itd...
Element szeroki ma rozmiar będący wielokrotnością szerokości elementu wąskiego. Wielokrotność ta przyjmuje wartości od 2 do 3 jeżeli element wąski jest większy niż 0,508 milimetra w przeciwnym wypadku wielokrotność ta powinna znaleźć się w zakresie od 2 do 2,2. Pomiędzy kolejnymi kodowanymi znakami zostawia się wolną przestrzeń, w praktyce przyjmuje się, że jest ona szerokości elementu wąskiego.
Zakodujmy więc napis ALGORYTM.ORG
Najpierw znak początku - "*" NWNNWNWNN
następnie "A" WNNNNWNNW
"L" NNWNNNNWW
"G" NNNNNWWNW
"O" WNNNWNNWN
"R" WNNNNNWWN
"Y" WWNNWNNNN
"T" NNNNWNWWN
"M" WNWNNNNWN
"." WWNNNNWNN
"O" WNNNWNNWN
"R" WNNNNNWWN
"G" NNNNNWWNW
Teraz suma kontrolna: A + L + G + O + R + Y + T + M + . + O + R + G = 10 + 21 + 16 + 24 + 27 + 34 + 29 + 22 + 37 + 24 + 27 + 16 = 287 mod 43 = 29 - czyli NNNNWNWWN
i na końcu - "*" NWNNWNWNN
czyli całość wygląda następująco: NWNNWNWNN WNNNNWNNW NNWNNNNWW NNNNNWWNW WNNNWNNWN WNNNNNWWN WWNNWNNNN NNNNWNWWN WNWNNNNWN WWNNNNWNN WNNNWNNWN WNNNNNWWN NNNNNWWNW NNNNWNWWN NWNNWNWNN
co w zapisie graficznym daje nam:
Każdy znak kodowany jest przez 5 czarnych kresek (ang. bar) i 4 odstępy pomiędzy nimi (ang. space). W sumie daje nam to 9 elementów. Każdy taki element może być szeroki (ang. wide) bądź wąski (ang. narrow), przy czym dla każdego znaku 3 z 9 elementów są szerokie a pozostałe wąskie - stąd pierwsza część nazwy kodowania Code 3 of 9. Druga mod 43 pochodzi od sposobu obliczania sumy kontrolnej. Dodajemy do siebie wartości wszystkich znaków występujących w kodowanym ciągu, a następnie wynik dzielimy modulo 43, jako sumę kontrolną wybieramy znak o otrzymanej wartości.
Tabela kodowania znaków: (N - oznacza wąski, W - oznacza szeroki), pierwszy znak oznacza czarną kreskę, drugi wolną przestrzeń, trzeci kolejną kreskę, czwarty kolejną wolną przestrzeń, itd...
Wartość | Znak | Kodowanie | Wartość | Znak | Kodowanie |
0 | 0 | NNNWWNWNN | 22 | M | WNWNNNNWN |
1 | 1 | WNNWNNNNW | 23 | N | NNNNWNNWW |
2 | 2 | NNWWNNNNW | 24 | O | WNNNWNNWN |
3 | 3 | WNWWNNNNN | 25 | P | NNWNWNNWN |
4 | 4 | NNNWWNNNW | 26 | Q | NNNNNNWWW |
5 | 5 | WNNWWNNNN | 27 | R | WNNNNNWWN |
6 | 6 | NNWWWNNNN | 28 | S | NNWNNNWWN |
7 | 7 | NNNWNNWNW | 29 | T | NNNNWNWWN |
8 | 8 | WNNWNNWNN | 30 | U | WWNNNNNNW |
9 | 9 | NNWWNNWNN | 31 | V | NWWNNNNNW |
10 | A | WNNNNWNNW | 32 | W | WWWNNNNNN |
11 | B | NNWNNWNNW | 33 | X | NWNNWNNNW |
12 | C | WNWNNWNNN | 34 | Y | WWNNWNNNN |
13 | D | NNNNWWNNW | 35 | Z | NWWNWNNNN |
14 | E | WNNNWWNNN | 36 | - | NWNNNNWNW |
15 | F | NNWNWWNNN | 37 | . | WWNNNNWNN |
16 | G | NNNNNWWNW | 38 | SPACJA | NWWNNNWNN |
17 | H | WNNNNWWNN | 39 | $ | NWNWNWNNN |
18 | I | NNWNNWWNN | 40 | / | NWNWNNNWN |
19 | J | NNNNWWWNN | 41 | + | NWNNNWNWN |
20 | K | WNNNNNNWW | 42 | % | NNNWNWNWN |
21 | L | NNWNNNNWW | - | * | NWNNWNWNN |
Element szeroki ma rozmiar będący wielokrotnością szerokości elementu wąskiego. Wielokrotność ta przyjmuje wartości od 2 do 3 jeżeli element wąski jest większy niż 0,508 milimetra w przeciwnym wypadku wielokrotność ta powinna znaleźć się w zakresie od 2 do 2,2. Pomiędzy kolejnymi kodowanymi znakami zostawia się wolną przestrzeń, w praktyce przyjmuje się, że jest ona szerokości elementu wąskiego.
- Kodowany ciąg ma następującą budowę:
- znak początku - "*"
- kodowany ciąg
- suma kontrolna (mod 43)
- znak końca - "*"
Przykład:
Zakodujmy więc napis ALGORYTM.ORG
Najpierw znak początku - "*" NWNNWNWNN
następnie "A" WNNNNWNNW
"L" NNWNNNNWW
"G" NNNNNWWNW
"O" WNNNWNNWN
"R" WNNNNNWWN
"Y" WWNNWNNNN
"T" NNNNWNWWN
"M" WNWNNNNWN
"." WWNNNNWNN
"O" WNNNWNNWN
"R" WNNNNNWWN
"G" NNNNNWWNW
Teraz suma kontrolna: A + L + G + O + R + Y + T + M + . + O + R + G = 10 + 21 + 16 + 24 + 27 + 34 + 29 + 22 + 37 + 24 + 27 + 16 = 287 mod 43 = 29 - czyli NNNNWNWWN
i na końcu - "*" NWNNWNWNN
czyli całość wygląda następująco: NWNNWNWNN WNNNNWNNW NNWNNNNWW NNNNNWWNW WNNNWNNWN WNNNNNWWN WWNNWNNNN NNNNWNWWN WNWNNNNWN WWNNNNWNN WNNNWNNWN WNNNNNWWN NNNNNWWNW NNNNWNWWN NWNNWNWNN
co w zapisie graficznym 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:32