Códigos paso a paso: leer / codificar PDF417

¿Te gustan los códigos? Bueno, o no lo ames. En cualquier caso, a veces necesita saber cómo usarlos correctamente. Puedes recorrer el camino largo, como hice la última vez , pero cuando no hay tiempo, es más fácil usar las instrucciones.


Entonces, tratemos con todo lo que necesita para leer y / o escribir PDF417. Después de todo, no siempre está a la mano encontrar un teléfono inteligente con un programa para leerlos. Y para que conste, y aún más.


Atención, debajo del corte: 9 imágenes con un tamaño total de 2,79 MB, 6 tablas y algunas fórmulas.





Tabla de contenido






01. Historia de PDF417 y derecho de uso


( Atrás | Tabla de contenido | Adelante )


PDF417 inventado por Symbol Technologies Inc. en 1991 y el 7 de septiembre de 1993, se le otorgó una patente estadounidense con el número 5,243,655 (disponible, por ejemplo, aquí ). De hecho, la patente describe no solo un método de codificación, sino un sistema integral para codificar y decodificar datos ( "Sistema para codificar y decodificar datos en forma gráfica legible por máquina" ). Además, no todas las recomendaciones de la patente se utilizan actualmente.


, 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=xi1+xi. .


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


xt:


C=(x0x2+x4x6)mod9,
C=(t1t2+t5t6)mod9,


mod9— 9.


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


PDF417 929 ( 000 928).





03.


( | | )


(. 2):


  • , , (N);
  • N1, ;
  • 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=30H+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+2kd2


2 , , , .


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


e+2kd3.


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á192224α
1SOH33!65A97a129ü161í193225ß
2STX34"66B98b130é162ó194226Γ
3ETX35#67C99c131â163ú195227π
4EOT36$68D100d132ä164ñ196228Σ
5ENQ37%69E101e133à165Ñ197229σ
6ACK38&70F102f134å166ª198230µ
7BEL39'71G103g135ç167º199231τ
8BS40(72H104h136ê168¿200232Φ
9HT41)73I105i137ë169201233Θ
10LF42*74J106j138è170¬202234Ω
11VT43+75K107k139ï171½203235δ
12FF44,76L108l140î172¼204236
13CR45-77M109m141ì173¡205237φ
14SO46.78N110n142Ä174«206238ε
15SI47/79O111o143Å175»207239
16DLE48080P112p144É176208240
17DC149181Q113q145æ177209241±
18DC250282R114r146Æ178210242
19DC351383S115s147ô179211243
20DC452484T116t148ö180212244
21NAK53585U117u149ò181213245
22SYN54686V118v150û182214246÷
23ETB55787W119w151ù183215247
24CAN56888X120x152ÿ184216248°
25EM57989Y121y153Ö185217249
26SUB58:90Z122z154Ü186218250·
27ESC59;91[123{155¢187219251
28FS60<92\124|156£188220252
29GS61=93]125}157¥189221253²
30RS62>94^126~158190222254
31US63?95_127DEL159ƒ191223255NBSP

. 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=30H+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).


, , - . , .


!




PD: si encuentra errores tipográficos o errores en el texto, hágamelo saber. Esto se puede hacer resaltando parte del texto y presionando " Ctrl / ⌘ + Enter ", si tiene Ctrl / ⌘, o mediante mensajes privados . Si ambas opciones no están disponibles, escriba sobre los errores en los comentarios. ¡Gracias!


All Articles