Wpisany przez Tomasz Lubiński,
16 stycznia 2007 14:20
Code 11, zwany również USD-8 pozwala zakodować zestaw 11 znaków - stąd jego nazwa. Są to cyfry 0-9 oraz znak myślnika '-'. Code 11 jest kodem o dużej gęstości pozwalającym na zakodowanie dowolnej liczby znaków. Stosowany jest głównie do oznaczania urządzeń telekomunikacyjnych. Znaki kodowane są następująco:
Pomiędzy kodowanymi znakami wprowadza się pojedyńczy odstęp o szerokości wąskiego paska/odstępu.
Obliczanie sumy kontrolnej 'C':
Należy obliczyć sumę ważoną wartości wszystkich kodowanych znaków przy czym znak najbardziej na prawo ma wagę 1, drugi od prawej 2, trzeci 3, itd aż do 10, znak 11 ma znów wagę 1. Wagi zatem zmieniają się od 1 do 10. Sumę ważoną dzielimy modulo 11 znak o wartości tego wyniku dodajemy na końcu kodowanego ciągu.
Obliczanie sumy kontrolnej 'K':
Należy obliczyć sumę ważoną wszystkich kodowanych znaków (łącznie z sumą kontrolną 'C') przy czym znak najbardziej na prawo ma wagę 1, drugi od prawej 2, trzeci 3, itd aż do 9, znak 10 ma znów wagę 9. Wagi zmieniają się zatem od 1 do 9. Sumę ważoną dzielimy modulo 11 znak o wartości tego wyniku dodajemy na końcu kodowanego ciągu.
Zakodujmy ciąg 12345-6789
Najpierw znak start/stop: 1011001
Znak 1 kodujemy: 1101011
Znak 2 kodujemy: 1001011
Znak 3 kodujemy: 1100101
Znak 4 kodujemy: 1011011
Znak 5 kodujemy: 1101101
Znak - kodujemy: 101101
Znak 6 kodujemy: 1001101
Znak 7 kodujemy: 1010011
Znak 8 kodujemy: 1101001
Znak 9 kodujemy: 110101
Suma kontrolna 'C' = 10 * 1 + 9 * 2 + 8 * 3 + 7 * 4 + 6 * 5 + 5 * 10 + 4 * 6 + 3 * 7 + 2 * 8 + 1 * 9 = 10 + 18 + 24 + 28 + 30 + 50 + 24 + 21 + 16 + 9 = 230 mod 11 = 10, czyli użyjemy znaku '-' kodowanego jako: 101101
Kodowany ciąg jest dłuższy niż 9 znaków dlatego obliczymy jeszcze sumę kontrolną 'K' = 2 * 1 + 1 * 2 + 9 * 3 + 8 * 4 + 7 * 5 + 6 * 10 + 5 * 6 + 4 * 7 + 3 * 8 + 2 * 9 + 1 * 10 = 2 + 2 + 27 + 32 + 35 + 60 + 30 + 28 + 24 + 18 + 10 = 268 mod 11 = 4, czyli użyjemy znaku '4' kodowanego jako: 1011011
I na końcu znak start/stop: 1011001
Wszystko to:
1011001 1101011 1001011 1100101 1011011 1101101 101101 1001101 1010011 1101001 110101 101101 1011011
zapisane w wersji graficznej wygląda następująco:
Znak | Wartość | Kod |
0 | 0 | 101011 |
1 | 1 | 1101011 |
2 | 2 | 1001011 |
3 | 3 | 1100101 |
4 | 4 | 1011011 |
5 | 5 | 1101101 |
6 | 6 | 1001101 |
7 | 7 | 1010011 |
8 | 8 | 1101001 |
9 | 9 | 110101 |
- (myślnik) | 10 | 101101 |
Start/Stop | - | 1011001 |
Pomiędzy kodowanymi znakami wprowadza się pojedyńczy odstęp o szerokości wąskiego paska/odstępu.
- Code 11 ma następującą strukturę:
- Znak start/stop
- Kodowany ciąg
- Znak kontrolny 'C'
- Znak kontrolny 'K', jeżeli długość kodowanego ciągu jest większa od 9
- Znak start/stop
Obliczanie sumy kontrolnej 'C':
Należy obliczyć sumę ważoną wartości wszystkich kodowanych znaków przy czym znak najbardziej na prawo ma wagę 1, drugi od prawej 2, trzeci 3, itd aż do 10, znak 11 ma znów wagę 1. Wagi zatem zmieniają się od 1 do 10. Sumę ważoną dzielimy modulo 11 znak o wartości tego wyniku dodajemy na końcu kodowanego ciągu.
Obliczanie sumy kontrolnej 'K':
Należy obliczyć sumę ważoną wszystkich kodowanych znaków (łącznie z sumą kontrolną 'C') przy czym znak najbardziej na prawo ma wagę 1, drugi od prawej 2, trzeci 3, itd aż do 9, znak 10 ma znów wagę 9. Wagi zmieniają się zatem od 1 do 9. Sumę ważoną dzielimy modulo 11 znak o wartości tego wyniku dodajemy na końcu kodowanego ciągu.
Przykład:
Zakodujmy ciąg 12345-6789
Najpierw znak start/stop: 1011001
Znak 1 kodujemy: 1101011
Znak 2 kodujemy: 1001011
Znak 3 kodujemy: 1100101
Znak 4 kodujemy: 1011011
Znak 5 kodujemy: 1101101
Znak - kodujemy: 101101
Znak 6 kodujemy: 1001101
Znak 7 kodujemy: 1010011
Znak 8 kodujemy: 1101001
Znak 9 kodujemy: 110101
Suma kontrolna 'C' = 10 * 1 + 9 * 2 + 8 * 3 + 7 * 4 + 6 * 5 + 5 * 10 + 4 * 6 + 3 * 7 + 2 * 8 + 1 * 9 = 10 + 18 + 24 + 28 + 30 + 50 + 24 + 21 + 16 + 9 = 230 mod 11 = 10, czyli użyjemy znaku '-' kodowanego jako: 101101
Kodowany ciąg jest dłuższy niż 9 znaków dlatego obliczymy jeszcze sumę kontrolną 'K' = 2 * 1 + 1 * 2 + 9 * 3 + 8 * 4 + 7 * 5 + 6 * 10 + 5 * 6 + 4 * 7 + 3 * 8 + 2 * 9 + 1 * 10 = 2 + 2 + 27 + 32 + 35 + 60 + 30 + 28 + 24 + 18 + 10 = 268 mod 11 = 4, czyli użyjemy znaku '4' kodowanego jako: 1011011
I na końcu znak start/stop: 1011001
Wszystko to:
1011001 1101011 1001011 1100101 1011011 1101101 101101 1001101 1010011 1101001 110101 101101 1011011
zapisane w wersji graficznej wygląda następująco:
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 |
Poprawiony: 29 sierpnia 2012 18:27