1 | <?php |
---|
2 | // ======================================================= |
---|
3 | // Example of how to format US Postal shipping information |
---|
4 | // ======================================================= |
---|
5 | require_once ('jpgraph/jpgraph_barcode.php'); |
---|
6 | |
---|
7 | // The Full barcode standard is described in |
---|
8 | // http://www.usps.com/cpim/ftp/pubs/pub91/91c4.html#508hdr1 |
---|
9 | // |
---|
10 | // The data start with AI=420 which means |
---|
11 | // "Ship to/Deliver To Postal Code (within single authority) |
---|
12 | // |
---|
13 | class USPS_Confirmation { |
---|
14 | function USPS_Confirmation() { |
---|
15 | } |
---|
16 | |
---|
17 | // Private utility function |
---|
18 | function _USPS_chkd($aData) { |
---|
19 | $n = strlen($aData); |
---|
20 | |
---|
21 | // Add all even numbers starting from position 1 from the end |
---|
22 | $et = 0 ; |
---|
23 | for( $i=1; $i <= $n; $i+=2 ) { |
---|
24 | $d = intval(substr($aData,-$i,1)); |
---|
25 | $et += $d; |
---|
26 | } |
---|
27 | |
---|
28 | // Add all odd numbers starting from position 2 from the end |
---|
29 | $ot = 0 ; |
---|
30 | for( $i=2; $i <= $n; $i+=2 ) { |
---|
31 | $d = intval(substr($aData,-$i,1)); |
---|
32 | $ot += $d; |
---|
33 | } |
---|
34 | $tot = 3*$et + $ot; |
---|
35 | $chkdigit = (10 - ($tot % 10))%10;; |
---|
36 | return $chkdigit; |
---|
37 | } |
---|
38 | |
---|
39 | // Get type 1 of confirmation code (with ZIP) |
---|
40 | function GetPICwithZIP($aZIP,$aServiceType,$aDUNS,$aSeqNbr) { |
---|
41 | // Convert to USPS format with AI=420 and extension starting with AI=91 |
---|
42 | $data = '420'. $aZIP . '91' . $aServiceType . $aDUNS . $aSeqNbr; |
---|
43 | // Only calculate the checkdigit from the AI=91 and forward |
---|
44 | // and do not include the ~1 (FUNC1) in the calculation |
---|
45 | $cd = $this->_USPS_chkd(substr($data,8)); |
---|
46 | $data = '420'. $aZIP . '~191' . $aServiceType . $aDUNS . $aSeqNbr; |
---|
47 | return $data . $cd; |
---|
48 | } |
---|
49 | |
---|
50 | // Get type 2 of confirmation code (without ZIP) |
---|
51 | function GetPIC($aServiceType,$aDUNS,$aSeqNbr) { |
---|
52 | // Convert to USPS format with AI=91 |
---|
53 | $data = '91' . $aServiceType . $aDUNS . $aSeqNbr; |
---|
54 | $cd = $this->_USPS_chkd($data); |
---|
55 | return $data . $cd; |
---|
56 | } |
---|
57 | |
---|
58 | } |
---|
59 | |
---|
60 | $usps = new USPS_Confirmation(); |
---|
61 | $zip = '92663'; |
---|
62 | $service = '21'; |
---|
63 | $DUNS = '805213907'; |
---|
64 | $seqnr = '04508735'; |
---|
65 | $data = $usps->GetPICwithZIP($zip,$service,$DUNS,$seqnr); |
---|
66 | //$data = $usps->GetPIC('01','123456789','00000001'); |
---|
67 | |
---|
68 | $encoder = BarcodeFactory::Create(ENCODING_EAN128); |
---|
69 | $e = BackendFactory::Create(BACKEND_IMAGE,$encoder); |
---|
70 | $e->SetModuleWidth(2); |
---|
71 | $e->SetFont(FF_ARIAL,FS_NORMAL,14); |
---|
72 | $e->Stroke($data); |
---|
73 | |
---|
74 | ?> |
---|