CĂłdigos passo a passo: ler / codificar PDF417

VocĂȘ gosta de cĂłdigos? Bem, ou nĂŁo ama. De qualquer forma, Ă s vezes vocĂȘ precisa saber como usĂĄ-los corretamente. VocĂȘ pode percorrer o caminho mais longo, como eu fiz da Ășltima vez , mas quando nĂŁo hĂĄ tempo, Ă© mais fĂĄcil usar as instruçÔes.


EntĂŁo, vamos lidar com tudo o que vocĂȘ precisa para ler e / ou escrever PDF417. Afinal, nem sempre Ă© possĂ­vel encontrar um smartphone com um programa para lĂȘ-lo. E para o registro - e ainda mais.


Atenção, abaixo do corte - 9 imagens com tamanho total de 2,79 MB, 6 tabelas e algumas fórmulas.





Índice






01. HistĂłrico do PDF417 e direito de uso


( Voltar | Índice | Avançar )


PDF417 inventado pela Symbol Technologies Inc. em 1991 e em 7 de setembro de 1993, uma patente dos EUA foi emitida para ele sob o nĂșmero 5.243.655 (disponĂ­vel, por exemplo, aqui ). De fato, a patente descreve nĂŁo apenas um mĂ©todo de codificação, mas um sistema complexo para codificar e decodificar dados ( "Sistema para codificar e decodificar dados em forma grĂĄfica legĂ­vel por mĂĄquina" ). AlĂ©m disso, nem todas as recomendaçÔes da patente sĂŁo usadas atualmente.


, PDF417 , .


: ISO/IEC 15438:2015, PDF417, — 198 CHF ( ). , . , , .





02.


( | | )


() PDF417 (. 1) — , . , ( ) . ().


, . PDF417 3 90 , 3 30 .




. 1. PDF417


17 ( ), 4 4 . 1 6 .


x−(x0,
,x7). 3 (), "", "". , t−, ti=xi−1+xi. .


PDF417 . , 0,3,6,
, — 1,4,7,
, — 2,5,8,
. (. 2), .


x−t−:


C=(x0−x2+x4−x6)mod9,
C=(t1−t2+t5−t6)mod9,


mod9— 9.


, 3 , 9 , . : C=(nrmod3)∗3.


PDF417 929 ( 000 928).





03.


( | | )


(. 2):


  • , , (N);
  • N−1, ;
  • Ne;
  • Nr.



. 2. PDF417


, , ( 900, ), d0,d1,
.





04.


( | | )


, PDF417 000 928 . , 2 787 .


000 899 .


900 : 928 — (. 1). 900, 901, 902, 913 924, .



##
900(TC)
901- (BC)
902(NC)
903: 912
913-
914: 920
921
922PDF macro
923PDF macro
924-6
925ECI / GLI
926ECI / GLI
927ECI / GLI
928PDF macro

. 1. PDF417. ,


PDF macro PDF417 . , ( ) .


ECI / GLI — Extended Channel Interpretation / Global Label Identifier — , . , ( , GLI 0, ), .





04.a) (TC, Text Compaction Mode)


( | | )


PDF417 ( ). 4 :


  • Alpha ( );
  • Lower case;
  • Mixed;
  • Punctuation.


##Alpha
(ASCII)
Lower case
(ASCII)
Mixed
(ASCII)
Punctuation
(ASCII)
0A (65)a (97)0 (48); (59)
1B (66)b (98)1 (49)< (60)
2C (67)c (99)2 (50)> (62)
3D (68)d (100)3 (51)@ (64)
4E (69)e (101)4 (52)[ (91)
5F (70)f (102)5 (53)\ (92)
6G (71)g (103)6 (54)] (93)
7H (72)h (104)7 (55)_ (95)
8I (73)i (105)8 (56)` (96)
9J (74)j (106)9 (57)~ (126)
10K (75)k (107)& (38)! (33)
11L (76)l (108)CR (13)CR (13)
12M (77)m (109)HT (9)HT (9)
13N (78)n (110), (44), (44)
14O (79)o (111): (58): (58)
15P (80)p (112)# (35)LF (10)
16Q (81)q (113)— (45)— (45)
17R (82)r (114). (46). (46)
18S (83)s (115)$ (36)$ (36)
19T (84)t (116)/ (47)/ (47)
20U (85)u (117)+ (43)" (34)
21V (86)v (118)% (37)| (124)
22W (87)w (119)* (42)* (42)
23X (88)x (120)= (61)( (40)
24Y (89)y (121)^ (94)) (41)
25Z (90)z (122)pl? (63)
26SP (32)SP (32)SP (32){ (123)
27llasll} (125)
28mlmlal' (39)
29pspspsal

. 2. GLI 0


  • al, ll, ml pl — alpha, lower case, mixed punctuation (l = latch);
  • as ps — alpha punctuation (s = shift) .

900 2 :


V=30∗H+L,


V— 900, H— , L— . X1X2.


, , H-, L- 29.


shift- . latch- .





04.b) - (BC, Byte Compaction Mode)


( | | )


900. 256. :


  • 901 ( 6);
  • 924 ( ).

, 6 5 256 900. , 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, (. 3).




. 3. , -


:


924, 001, 620, 089, 074, 846.


6, 6 5 , — . , 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 :


901, 001, 620, 089, 074, 846, 007, 008, 009.


, - 913.





04.c) (NC, Numeric Compaction Mode)


( | | )


10 900. , 0 9. , 44 15 .


902. , 13 . , 3 ( , 2.93) , , (2 ).


900 1 , . 4. , 1 .




. 4. ,





05.


( | | )


. PDF417 2 . , , (. 3).




( )
02 (0)
14 (2)
28 (6)
316 (14)
432 (30)
564 (62)
6128 (126)
7256 (254)
8512 (510)

. 3. PDF417


:


  • , (erasures), " ";
  • , , (errors), " ".

:


e−;
k−;
s−;
Ne=2s+1−.


:


e+2k≀d−2


2 , , , .


Error Correction Capacity, , . , , . , s=0, , :


e+2k≀d−3.


2 , . 2 .


, s=3, 13 , 7 , , (9 2 ..).


- GF(929). .


(. 4).



-
0: 402
41: 1603
161: 3204
321: 8635

. 4.





06.


( | | )


( 03), PDF417.


, , . , , , , , (. 5).




. 5.





07.


( | | )


x-, 17- GitHub


( 02), PDF417 3 (0, 3 6) 929 . 17- , x-. , , , , . 5.



##036
0311111365111112521111155
1411111446111113331111163
2511111524111121611111246
3311112355111122421111254
4411112436111123231111262
5511112514111131511111345
6211113265111132321111353
7311113346111133131111361
8211114254111141411111444
9111115165111142221111452
10211115244111151311111543
11111116155111152161112114
12211121364111161211112155
13311121444111212521112163
14411121525111213361112213
15211122356111214111112254
16311122433111221621112262
17411122514111222461112312
18111123265111223211112353
19211123343111231521112361
20

. 5. 20 x-





08. 8-


( | | )


GLI 0


ASCII 0:127. 128:255 PC 437.



################
0NUL32SP64@96`128Ç160ĂĄ192└224α
1SOH33!65A97a129ĂŒ161Ă­193┮225ß
2STX34"66B98b130Ă©162Ăł194┬226Γ
3ETX35#67C99c131Ăą163Ăș195├227π
4EOT36$68D100d132Ă€164ñ196─228ÎŁ
5ENQ37%69E101e133Ă 165Ñ197┌229σ
6ACK38&70F102f134Ă„166ÂȘ198╞230”
7BEL39'71G103g135ç167Âș199╟231τ
8BS40(72H104h136ĂȘ168Âż200╚232Ί
9HT41)73I105i137Ă«169⌐201╔233Θ
10LF42*74J106j138Ăš170ÂŹ202╩234Ω
11VT43+75K107k139ĂŻ171Âœ203╩235ÎŽ
12FF44,76L108l140Ăź172ÂŒ204╠236∞
13CR45-77M109m141ĂŹ173ÂĄ205═237φ
14SO46.78N110n142Ä174«206╬238Δ
15SI47/79O111o143Å175»207╧239∩
16DLE48080P112p144É176░208╹240≡
17DC149181Q113q145ĂŠ177▒209â•€241±
18DC250282R114r146Æ178▓210â•„242≄
19DC351383S115s147ĂŽ179│211╙243≀
20DC452484T116t148ö180─212╘244⌠
21NAK53585U117u149ĂČ181╡213╒245⌡
22SYN54686V118v150Ă»182╱214╓246Ă·
23ETB55787W119w151Ăč183╖215╫247≈
24CAN56888X120x152Ăż184╕216â•Ș248°
25EM57989Y121y153Ö185╣217┘249∙
26SUB58:90Z122z154Ü186║218┌250·
27ESC59;91[123{155±187╗219█251√
28FS60<92\124|156£188╝220▄252ⁿ
29GS61=93]125}157„189╜221▌253ÂČ
30RS62>94^126~158₧190╛222▐254■
31US63?95_127DEL159ƒ191┐223▀255NBSP

. 6. GLI 0, PDF417


GLI 1


ISO 8859-1 ().





09. PDF417,


( | | )


PDF417 .


, , PDF417 - -, x- 81111113 711311121 (18 ) .


, PDF417 (. 6). , - -.




. 6. 0 PDF417





10.


( | | )


. ( 0, 0). , 19 (. 7). , , ( , , 06). , 1 -, 18 - 8 , 27, .


. , .




. 7. ,





11. PDF417


( | | )


, 000 928 (. 8). , , .




. 8.


— 900 : 928. . 8, . , (TC, 04.a).





12.


( | | )


, , 2 :


V=30∗H+L


H30, L— 30.


:


(27)(07) (19)(19) (15)(18) (28)(14) (19)(19) (28)(07) (27)(00) (01)(17) (29)(17) (02)(14) (12)(29) (19)(15) (14)(18) (19)(28) (19)(05) (00)(00) (09)(06) (02)(29)


( . 2):


(ll)https(ml)://(al)H(ll)abr(ps).com(ps)/post(ml)/500962(ps)


(ll), (ml), (al) (ps) 04.a.


:


https://Habr.com/post/500962


, . 8 ( 05).





13.


( | | )


— . .


, . , 3 . , ( ).


, — x−, t−( 02). PDF417 , ( ..), , , — . , .


. , , ( ). .





14.


( | | )


, , .



1.  P -   
2. ,      (900)
3.  N -  ,   ,    P

    4.  N ≄ 13
        5.     (902)
        6.    
        7.  P
        8.    3

    9.  N < 13
        10.  T -    ,  
             .      
              (901, 902, 913, 924)    
              13 .

        11.  T ≄ 5
            12.     (900)
            13.  
            14.  P
            15.   3

        16. T < 5
            17.  B -    , 
                  P.     11
                 4.

            18. B == 1 &   - 
                19.      1  (913)
                20.   
                21.  P
                22.    3

            23. 
                24.     (901  924   
                     ,  04.b)
                25. 
                26.  P
                27.    3





15. ,


( | | )


, PDF417 , . , 3:1( , . 4). , 4:1.


, PDF417 " ", 2 .


:


H=NrY+2Q
W=(17Nc+69)X+2Q



H— ;
W— ;
Nr— ;
Nc— ;
Y— ();
X— ;
Q— ( 2X).





16. () PDF417


( | | )


PDF417 "" ( ), PDF417 (Truncated PDF417, . 9).


:


  • ( , 06);
  • - 1 .

34 15 :


W=(17Nc+35)X+2Q




. 9. PDF417 ( , )


, :


  • , ;
  • - .




17.


( | | )


PDF417






  • + (GitHub)




18.


( | | )


, PDF417. (, , ) , .


, step by step:



, , , ( PDF417).


, , - . , .


!




PS Se vocĂȘ encontrar erros de digitação ou erros no texto, entre em contato. Isso pode ser feito destacando parte do texto e pressionando " Ctrl / ⌘ + Enter ", se vocĂȘ tiver Ctrl / ⌘, ou atravĂ©s de mensagens privadas . Se as duas opçÔes nĂŁo estiverem disponĂ­veis, escreva sobre erros nos comentĂĄrios. Obrigado!


All Articles