Aztec -kod - Aztec Code

Kodning: "Detta är ett exempel på aztekisk symbol för Wikipedia."

Aztec Code är en typ av 2D -streckkod som uppfanns av Andrew Longacre, Jr. och Robert Hussey 1995. Koden publicerades av AIM, Inc. 1997. Även om Aztec -koden patenterades, gjordes det patentet offentligt. Aztec -koden publiceras också som ISO/IEC 24778: 2008 -standard. Uppkallad efter likheten mellan det centrala sökmönstret och en aztekisk pyramid , har aztekisk kod potential att använda mindre utrymme än andra matrisstreckkoder eftersom det inte kräver en omgivande tom "tyst zon".

Strukturera

Symbolen är byggd på ett fyrkantigt rutnät med ett bulls-eye-mönster i mitten för att hitta koden. Data kodas i koncentriska fyrkantiga ringar runt bulls-eye-mönstret. Det centrala bulls-eye är 9 × 9 eller 13 × 13 pixlar , och en rad pixlar runt som kodar grundläggande kodningsparametrar, vilket ger en "kärna" på 11 × 11 eller 15 × 15 rutor. Data läggs till i "lager", var och en innehållande två ringar av pixlar, vilket ger totala storlekar på 15 × 15, 19 × 19, 23 × 23, etc.

Kärnans hörn innehåller orienteringsmärken, så att koden kan läsas om den roteras eller reflekteras. Avkodningen börjar i hörnet med tre svarta pixlar och fortsätter medurs till hörnen med två, en och noll svarta pixlar. De variabla pixlarna i den centrala kärnan kodar storleken, så det är inte nödvändigt att markera gränsen för koden med en tom "tyst zon", även om vissa streckkodsläsare kräver en.

Den kompakta aztekiska kärnkärnan kan vara omgiven av 1 till 4 lager och producera symboler från 15 × 15 (plats för 13 siffror eller 12 bokstäver) till 27 × 27. Det finns dessutom en speciell 11 × 11 "runa" som kodar för en byte av information. Hela kärnan stöder upp till 32 lager, 151 × 151 pixlar, som kan koda 3832 siffror, 3067 bokstäver eller 1914 byte med data.

Vilken del av symbolen som inte används för grunddata används för felkorrigering av Reed -Solomon och delningen är helt konfigurerbar mellan gränserna för 1 dataord och 3 kontrollord. Det rekommenderade antalet kontrollord är 23% av symbolkapaciteten plus 3 kodord.

Aztec Code är tänkt att producera läsbara koder med olika skrivartekniker. Den är också väl lämpad för displayer av mobiltelefoner och andra mobila enheter.

Kodning

Kodningsprocessen består av följande steg:

  1. Konvertera källmeddelandet till en bitsträng
  2. Beräkna nödvändig symbolstorlek och lägesmeddelande, som bestämmer kodordstorleken för Reed -Solomon
  3. Bit-stoppa meddelandet i Reed – Solomon kodord
  4. Skicka meddelandet till en kodordgräns
  5. Lägg till kontrollkodord
  6. Ordnar hela budskapet i en spiral runt kärnan

All konvertering mellan bitar strängar och andra former utförs enligt konventionen big-endian (mest betydande bit först).

Teckenuppsättning

Alla 8-bitars värden kan kodas, plus två flyktkoder:

  • FNC1, en flyktsymbol som används för att markera närvaron av en applikationsidentifierare, på samma sätt som i GS1-128- standarden.
  • ECI, en flykt följt av en 6-siffrig tolkningskod för utökad kanal , som anger teckenuppsättningen som används för att tolka följande byte.

Som standard tolkas koder 0–127 enligt ANSI X3.4 ( ASCII ) och 128–255 tolkas enligt ISO 8859-1 : Latin Alphabet No. 1. Detta motsvarar ECI 000003.

Byte översätts till 4- och 5-bitars koder, baserat på ett aktuellt avkodningsläge, med skift- och spärrkoder för att ändra lägen. Bytevärden som inte är tillgängliga på detta sätt kan kodas med en allmän "binär skift" -kod, som följs av en längd och ett antal 8-bitars koder.

För ändrade lägen påverkar en skiftning endast tolkningen av den följande koden, medan en spärr påverkar alla följande koder. De flesta lägen använder 5-bitars koder, men Digit-läget använder 4-bitars koder.

Aztec -kodteckenkodning
Koda Läge Koda Läge
Övre Lägre Blandad Punktera Siffra Övre Lägre Blandad Punktera
0 P/S P/S P/S FLG ( n ) P/S 16 O o ^\ +
1 SP SP SP CR SP 17 P sid ^] ,
2 A a ^A CR LF 0 18 F q ^^ -
3 B b ^B . SP 1 19 R r ^_ .
4 C c ^C , SP 2 20 S s @ /
5 D d ^D : SP 3 21 T t \ :
6 E e ^E ! 4 22 U u ^ ;
7 F f ^F " 5 23 V v _ <
8 G g ^G # 6 24 W w ` =
9 H h ^H $ 7 25 X x | >
10 I i ^Jag % 8 26 Y y ~ ?
11 J j ^J & 9 27 Z z ^? [
12 K k ^K ' , 28 L/L U/S L/L ]
13 L l ^L ( . 29 M/L M/L U/L {
14 M m ^M ) U/L 30 D/L D/L P/L }
15 N n ^[ * U/S 31 B/S B/S B/S U/L
  • Utgångsläget är "Övre"
  • x/S = Skift till läge x för ett tecken; B/S = skift till 8-bitars binär
  • x/L = Spärr till läge x för följande tecken
  • Punktkoder 2–5 kodar två byte vardera
  • Tabellen visar ASCII-tecken, men det är bytevärdena som kodas, även om ett icke-ASCII-tecken använde det

B/S (binärt skift) följs av en 5-bitars längd. Om den inte är noll indikerar detta att 1–31 8-bitars byte följer. Om noll, 11 ytterligare längdbitar kodar antalet följande byte mindre 31. (Observera att för 32–62 byte är två 5-bitars byte-skiftsekvenser mer kompakta än en 11-bitars.) I slutet av den binära sekvensen, föregående läge återupptas.

FLG ( n ) följs av ett 3-bitars n- värde. n = 0 kodar FNC1. n = 1–6 följs av 1–6 siffror (i sifferläge) som är nollfyllda för att skapa en 6-bitars ECI-identifierare. n = 7 är reserverad och för närvarande olaglig.

Lägesmeddelande

Lägesmeddelandet kodar för antalet lager ( L -lager kodade som heltalet L −1) och antalet datakodord ( D -kodord, kodade som heltalet D −1) i meddelandet. Alla återstående kodord används som kontrollkodord.

För kompakta aztekiska koder kodas antalet lager som ett 2-bitars värde och antalet datakodord som ett 6-bitars värde, vilket resulterar i ett 8-bitars modeord. För fullständiga Aztec-koder kodas antalet lager i 5 bitar, och antalet datakodord kodas i 11 bitar, vilket ger ett 16-bitars modeord.

Lägesordet är uppdelat i 2 eller 4 4-bitars kodord i GF (16) , och 5 eller 6 Reed – Solomon-kontrollord läggs till, vilket gör ett 28- eller 40-bitars lägesmeddelande, som är inslaget i en 1-pixel lager runt kärnan.

Eftersom en L+1-lagers kompakt aztekisk kod kan innehålla mer data än en L-lager-fullständig kod, används sällan hela koder med mindre än 4 lager.

Viktigast av allt är att antalet lager avgör storleken på Reed -Solomon kodord som används. Detta varierar från 6 till 12 bitar:

Aztec -kod ändliga fältpolynom
Bitar Fält Polynom Används för
4 GF (16) x 4 + x +1 Lägesmeddelande
6 GF (64) x 6 + x +1 1–2 lager
8 GF (256) x 8 + x 5 + x 3 + x 2 +1 3–8 lager
10 GF (1024) x 10 + x 3 +1 9–22 lager
12 GF (4096) x 12 + x 6 + x 5 + x 3 +1 23–32 lager

Kodordets storlek b är det minsta jämna talet som säkerställer att det totala antalet kodord i symbolen är mindre än gränsen för 2 b −1 som kan korrigeras med en Reed -Solomon -kod.

Som nämnts ovan rekommenderas att minst 23% av de tillgängliga kodorden, plus 3, är reserverade för korrigering, och en symbolstorlek väljs så att meddelandet passar in i det tillgängliga utrymmet.

Lite fyllning

Databitar bryts upp i kodord, där den första biten motsvarar den mest signifikanta koefficienten. När du gör detta undviks kodord för alla-noll och alla-en genom bitstoppning : om de första b −1 bitarna i ett kodord har samma värde infogas en extra bit med komplementvärdet i dataströmmen. Denna insättning sker oavsett om den sista biten av kodordet skulle ha haft samma värde eller inte.

Observera också att detta endast gäller strängar av b − 1 bitar i början av ett kodord . Längre strängar med identiska bitar är tillåtna så länge de gränsar över en kodordgräns.

Vid avkodning kan ett kodord med alla noll eller alla antas vara en radering och korrigeras mer effektivt än ett allmänt fel.

Denna process gör meddelandet längre och det slutliga antalet datakodord som spelas in i lägesmeddelandet är inte känt förrän det är klart. I sällsynta fall kan det vara nödvändigt att hoppa till den näst största symbolen och börja processen om igen för att upprätthålla den minsta andelen kontrollord.

Stoppning

Efter bitstoppning stoppas datasträngen till nästa kodordgräns genom att lägga till 1 bitar. Om detta skulle resultera i ett kodord av alla, ändras den sista biten till noll (och ignoreras av avkodaren som en bit-fyllningsbit). Vid avkodning kan stoppningsbitarna avkodas som skift- och spärrkoder, men det påverkar inte meddelandeinnehållet. Läsaren måste acceptera och ignorera en delkod i slutet av meddelandet, så länge det är all-one.

Om det totala antalet databitar som finns tillgängliga i symbolen inte är en multipel av kodordstorleken, har datasträngen ett prefix med ett lämpligt antal 0 bitar för att uppta det extra utrymmet. Dessa bitar ingår inte i kontrollordberäkningen.

Kontrollera kodord

Både lägesordet och datan måste ha kontrollord bifogade för att fylla i det tillgängliga utrymmet. Detta beräknas genom att lägga till K -checkord så att hela meddelandet är en multipel av Reed -Solomon -polynomet ( x −2) ( x −4) ... ( x −2 K ).

Observera att kontrollord inte utsätts för bitfyllning och kan vara hel-noll eller all-one. Det är således inte möjligt att upptäcka radering av ett kontrollord.

Att lägga ut budskapet

9-lager (53 × 53) Aztec-kod som visar referensnät.

En fullständig aztekisk kodsymbol har, förutom kärnan, ett "referensnät" med alternerande svartvita pixlar som upptar var 16: e rad och kolumn. Dessa kända pixlar tillåter en läsare att upprätthålla anpassningen till pixelnätet över stora symboler. För upp till 4 lager (31 × 31 pixlar) består detta endast av enstaka linjer som sträcker sig utåt från kärnan och fortsätter det växlande mönstret. Inuti det femte lagret infogas dock ytterligare rader och kolumner med alternerande pixlar ± 16 pixlar från mitten, så det femte lagret ligger ± 17 och ± 18 pixlar från mitten och en 5-lager-symbol är 37 × 37 pixlar .

På samma sätt infogas ytterligare referensgallerrader och kolumner ± 32 pixlar från mitten, vilket gör en symbol med 12 lager 67 × 67 pixlar. I detta fall upptar det 12: e lagret ringar ± 31 och ± 33 pixlar från mitten. Mönstret fortsätter på obestämd tid utåt, med 15 pixel block av data åtskilda av rader och kolumner i referensnätet.

Ett sätt att konstruera symbolen är att radera referensnätet helt och börja med en 14 × 14 pixel kärna centrerad på en 2 × 2 pixlar vit kvadrat. Dela den sedan i 15 × 15 pixelblock och sätt in referensgaller mellan dem.

Lägesmeddelandet börjar i det övre vänstra hörnet av kärnan och sveper runt det medurs i ett 1-bitars tjockt lager. Det börjar med den mest betydande biten av antalet lager och slutar med kontrollorden. För en kompakt aztekisk kod delades den i fyra 7-bitars bitar för att lämna plats för orienteringsmärkena. För en fullständig aztekisk kod är den uppdelad i fyra 10-bitars bitar, och dessa delar delas var och en i hälften av referensnätet.

I vissa fall delar matrisens totala kapacitet inte jämnt med hela kodord. I sådana fall är huvudmeddelandet vadderat med 0 bitar i början. Dessa bitar ingår inte i beräkningen av kontrollord och bör hoppas över under avkodningen. Den totala matriskapaciteten för en hel symbol kan beräknas som (112+16*L)*L för en fullständig aztekisk kod och (88+16*L)*L för en kompakt aztekisk kod, där L är symbolstorleken i lager . Som ett exempel är den totala matriskapaciteten för en kompakt aztekisk kod med 1 lager 104 bitar. Eftersom kodord är sex bitar ger detta 17 kodord och två extra bitar. Två nollbitar förbereds till meddelandet som vaddering och måste hoppas över under avkodning.

Det vadderade huvudmeddelandet börjar längst upp till vänster på hela symbolen och spiraler runt det moturs i ett 2-bitars tjockt lager och slutar direkt ovanför det övre vänstra hörnet av kärnan. Detta placerar de bitfyllda dataorden, för vilka raderingar kan detekteras, i de yttersta lagren av symbolen, vilket är mest benägna att radera. Kontrollorden lagras närmare kärnan. Det sista kontrollordet slutar precis ovanför det övre vänstra hörnet av tjurögat.

Med kärnan i sin standardorientering placeras den första biten i det första dataordet i det övre vänstra hörnet, med ytterligare bitar placerade i en 2-bitars bred kolumn från vänster till höger och topp-till-botten. Detta fortsätter tills 2 rader från symbolens botten när mönstret roterar 90 grader moturs och fortsätter i en 2-bitars hög rad, från botten till toppen och från vänster till höger. Efter 4 lika stora kvartskikt fortsätter spiralen med det övre vänstra hörnet av nästa inre lager och slutligen slutar en pixel ovanför det övre vänstra hörnet av kärnan.

Slutligen skrivs 1 bit ut som svarta rutor och 0 bitar skrivs ut som vita rutor.

Användande

Online -biljett från Deutsche Bahn. Observera att Aztec -streckkoden i denna exempelbiljett inte kan läsas med en vanlig app eftersom mitten är annorlunda.

Transport

Aztec -koder används i stor utsträckning för transportbiljetter.

Aztec -koden har valts ut av flygindustrin ( IATA: s BCBP -standard) för elektroniska boardingkort. Flera flygbolag skickar Aztec Codes till passagerarnas mobiltelefoner för att fungera som boardingkort. Dessa är ofta integrerade med appar på passagerares telefoner, inklusive Apple Wallet .

Aztec -koder används också på järnväg, inklusive av Teheran Metro , Eurostar , Deutsche Bahn , TCDD Taşımacılık , DSB , České dráhy , Slovak Railways , Slovenian Railways , Croatian Railways , Trenitalia , Nederlandse Spoorwegen , PKP Intercity , VR Group , National Rail , Via Rail , Swiss Federal Railways , SNCB och SNCF för biljetter som säljs online och skrivs ut av kunder eller visas på mobiltelefonskärmar. Aztec-koden skannas av en handhållen skanner av personal på tåget eller vid vändkorset för att validera biljetten.

Statliga

Bilregistreringsdokument i Polen har en sammanfattning, komprimerad av NRV2E -algoritmen, kodad som aztekisk kod. Arbete pågår för att göra det möjligt för bilförsäkringsbolag att automatiskt fylla i relevant information baserad på digitala fotografier av dokumentet som det första steget för att sluta ett nytt försäkringsavtal.

Federal Tax Service i Ryssland kodar betalningsinformation i skattemeddelanden som aztekisk kod.

Kommersiell

Många räkningar i Kanada använder nu också denna teknik, inklusive EastLink (företag) , Shaw Cable , Bell Aliant och många fler.

Referenser

externa länkar