cQBIT ;NUMBER CONVERSIONS ;cQBIT; Q ; DH(G) ;decimal to hexadecimal N H,X S H="",G=$G(G) Q:G'?.N "Error" Q:'G 0 F S X=G#16,G=G\16 Q:'(X!G) S H=$E("0123456789ABCDEF",X+1)_H DHZ Q H ; HD(G) ;hexadecimal to decimal N E,H,I,J,X S H=0,X=1,E=0,G=$G(G) F I=$L(G):-1:1 D I E S H="Error" Q . S X=$F("0123456789ABCDEF",$TR($E(G,I),"abcdef","ABCDEF"))-2 I X<0 S E=1 Q . F J=1:1:$L(G)-I S X=X*16 . S H=H+X HDZ Q H ; DB(G) ;Decimal to binary DBZ Q $$HB($$DH($G(G))) ; BD(G) ;binary to decimal Q $$HD($$BH($G(G))) BDZ Q H ; HB(H) ;Hex to binary N B,E,I S B="" F I=1:1:$L(H) D I E=-1 S B="Error" Q . S E=$F("0123456789ABCDEF",$tr($E(H,I),"abcdef","ABCDEF"))-1 I E=-1 Q . S B=B_$P("0000\0001\0010\0011\0100\0101\0110\0111\1000\1001\1010\1011\1100\1101\1110\1111\","\",E) HBZ Q B ; BH(B) ;Binary to Hex N A,I,E,H S H="" F I=$L(B):-4:1 D I E=-1 S H="Error" Q . S A=$E(B,I-3,I),A=$E("0000",$L(A)+1,4)_A . S E=$F("0000\0001\0010\0011\0100\0101\0110\0111\1000\1001\1010\1011\1100\1101\1110\1111\",A)\5-1 I E=-1 Q . S H=$E("0123456789ABCDEF",E+1)_H BHZ Q H ; S2E(S) ;EAN.UCC SSCC to EPC SSCC-96 encoding ; S is SSCC data in DECIMAL format N E,ED,CP,SR,CD,L,P,M,N,C,SS,EH,EF,EZB,EP,ECP,ESS S S=$G(S) I $L(S)=20 S S=$E(S,3,$L(S)) S E="Error" I $L(S)=18 D . S ED=$E(S,1),CP=$E(S,2,8),SR=$E(S,9,17),CD=$E(S,18) . S L=$L(CP) I (L>12)!(L<6) Q . I L=12 S P=0,M=40,N=18 . I L=11 S P=1,M=37,N=21 . I L=10 S P=2,M=34,N=24 . I L=9 S P=3,M=30,N=28 . I L=8 S P=4,M=27,N=31 . I L=7 S P=5,M=24,N=34 . I L=6 S P=6,M=20,N=38 . S C=CP,SS=ED_SR . S EH="00110001" . S EF="000" . S EZB=$E("000000000000000000000000000000",1,24) . S EP=$RE($E($RE(EZB_$$DB(P)),1,3)) . S ECP=$RE($E($RE(EZB_$$DB(CP)),1,M)) . S ESS=$RE($E($RE(EZB_$$DB(SS)),1,N)) . S E=$$BH(EH_EF_EP_ECP_ESS_EZB) S2EZ Q E ; E2S(E) ;EPC SSCC-96 to EAN.UCC SSCC encoding ; E is SSC-96 tag data in HEX format N S,K,EH,EF,EP,P,L,M,N,ECP,CP,ESS,SS,ED,SR,EZB S E=$$HB(E) S S="Error" I $L(E)=96 D . S K=$RE(E) . S EH=$RE($E(K,89,96)) I EH'="00110001" Q . S EF=$RE($E(K,86,88)) . S EP=$RE($E(K,83,85)),P=$$BD(EP) I P>6 Q . I P=0 S L=12,M=40,N=18 . I P=1 S L=11,M=37,N=21 . I P=2 S L=10,M=34,N=24 . I P=3 S L=9,M=30,N=28 . I P=4 S L=8,M=27,N=31 . I P=5 S L=7,M=24,N=34 . I P=6 S L=6,M=20,N=38 . S ECP=$RE($E(K,83-M,82)),CP=$$BD(ECP) . S ESS=$RE($E(K,25,83-M)),SS=$$BD(ESS) . S ED=$E(SS),SR=$E(SS,2,$L(SS)) . S EZB=$RE($E(K,1,24)) . S S=ED_CP_SR,S=S_$$CC(S) E2SZ Q S ; CC(R) ; bereken checksum SSCC N C,I,K,L S R=" "_$RE($TR(R," ()","")),(K,L)=0 F I=2:2:18 S K=K+$E(R,I) S K=K*3 F I=3:2:17 S L=L+$E(R,I) S C=K+L,C=10-(C#10) S:C=10 C=0 CCZ Q C ; ZZ ; 17.01.2012 - 15:58 * Cache-r6.4.9