| @@ -374,9 +374,8 @@ | ||
| 374 | 374 | $chr['%'] = '111212121'; |
| 375 | 375 | $chr['*'] = '121121211'; |
| 376 | 376 | |
| 377 | 377 | $code = strtoupper($code); |
| 378 | - $checkdigit = ''; | |
| 379 | 378 | if ($extended) { |
| 380 | 379 | // extended mode |
| 381 | 380 | $code = $this->encode_code39_ext($code); |
| 382 | 381 | } |
| @@ -428,9 +427,9 @@ | ||
| 428 | 427 | protected function encode_code39_ext($code) { |
| 429 | 428 | $encode = array( |
| 430 | 429 | chr(0) => '%U', chr(1) => '$A', chr(2) => '$B', chr(3) => '$C', |
| 431 | 430 | chr(4) => '$D', chr(5) => '$E', chr(6) => '$F', chr(7) => '$G', |
| 432 | - chr(8) => '$H', chr(9) => '$I', chr(10) => '$J', chr(11) => '�K', | |
| 431 | + chr(8) => '$H', chr(9) => '$I', chr(10) => '$J', chr(11) => '£K', | |
| 433 | 432 | chr(12) => '$L', chr(13) => '$M', chr(14) => '$N', chr(15) => '$O', |
| 434 | 433 | chr(16) => '$P', chr(17) => '$Q', chr(18) => '$R', chr(19) => '$S', |
| 435 | 434 | chr(20) => '$T', chr(21) => '$U', chr(22) => '$V', chr(23) => '$W', |
| 436 | 435 | chr(24) => '$X', chr(25) => '$Y', chr(26) => '$Z', chr(27) => '%A', |
| @@ -493,61 +492,61 @@ | ||
| 493 | 492 | * CODE 93 - USS-93 |
| 494 | 493 | * Compact code similar to Code 39 |
| 495 | 494 | */ |
| 496 | 495 | protected function barcode_code93($code) { |
| 497 | - $chr[48] = '131112'; // 0 | |
| 498 | - $chr[49] = '111213'; // 1 | |
| 499 | - $chr[50] = '111312'; // 2 | |
| 500 | - $chr[51] = '111411'; // 3 | |
| 501 | - $chr[52] = '121113'; // 4 | |
| 502 | - $chr[53] = '121212'; // 5 | |
| 503 | - $chr[54] = '121311'; // 6 | |
| 504 | - $chr[55] = '111114'; // 7 | |
| 505 | - $chr[56] = '131211'; // 8 | |
| 506 | - $chr[57] = '141111'; // 9 | |
| 507 | - $chr[65] = '211113'; // A | |
| 508 | - $chr[66] = '211212'; // B | |
| 509 | - $chr[67] = '211311'; // C | |
| 510 | - $chr[68] = '221112'; // D | |
| 511 | - $chr[69] = '221211'; // E | |
| 512 | - $chr[70] = '231111'; // F | |
| 513 | - $chr[71] = '112113'; // G | |
| 514 | - $chr[72] = '112212'; // H | |
| 515 | - $chr[73] = '112311'; // I | |
| 516 | - $chr[74] = '122112'; // J | |
| 517 | - $chr[75] = '132111'; // K | |
| 518 | - $chr[76] = '111123'; // L | |
| 519 | - $chr[77] = '111222'; // M | |
| 520 | - $chr[78] = '111321'; // N | |
| 521 | - $chr[79] = '121122'; // O | |
| 522 | - $chr[80] = '131121'; // P | |
| 523 | - $chr[81] = '212112'; // Q | |
| 524 | - $chr[82] = '212211'; // R | |
| 525 | - $chr[83] = '211122'; // S | |
| 526 | - $chr[84] = '211221'; // T | |
| 527 | - $chr[85] = '221121'; // U | |
| 528 | - $chr[86] = '222111'; // V | |
| 529 | - $chr[87] = '112122'; // W | |
| 530 | - $chr[88] = '112221'; // X | |
| 531 | - $chr[89] = '122121'; // Y | |
| 532 | - $chr[90] = '123111'; // Z | |
| 533 | - $chr[45] = '121131'; // - | |
| 534 | - $chr[46] = '311112'; // . | |
| 535 | - $chr[32] = '311211'; // | |
| 536 | - $chr[36] = '321111'; // $ | |
| 537 | - $chr[47] = '112131'; // / | |
| 538 | - $chr[43] = '113121'; // + | |
| 539 | - $chr[37] = '211131'; // % | |
| 496 | + $chr['0'] = '131112'; | |
| 497 | + $chr['1'] = '111213'; | |
| 498 | + $chr['2'] = '111312'; | |
| 499 | + $chr['3'] = '111411'; | |
| 500 | + $chr['4'] = '121113'; | |
| 501 | + $chr['5'] = '121212'; | |
| 502 | + $chr['6'] = '121311'; | |
| 503 | + $chr['7'] = '111114'; | |
| 504 | + $chr['8'] = '131211'; | |
| 505 | + $chr['9'] = '141111'; | |
| 506 | + $chr['A'] = '211113'; | |
| 507 | + $chr['B'] = '211212'; | |
| 508 | + $chr['C'] = '211311'; | |
| 509 | + $chr['D'] = '221112'; | |
| 510 | + $chr['E'] = '221211'; | |
| 511 | + $chr['F'] = '231111'; | |
| 512 | + $chr['G'] = '112113'; | |
| 513 | + $chr['H'] = '112212'; | |
| 514 | + $chr['I'] = '112311'; | |
| 515 | + $chr['J'] = '122112'; | |
| 516 | + $chr['K'] = '132111'; | |
| 517 | + $chr['L'] = '111123'; | |
| 518 | + $chr['M'] = '111222'; | |
| 519 | + $chr['N'] = '111321'; | |
| 520 | + $chr['O'] = '121122'; | |
| 521 | + $chr['P'] = '131121'; | |
| 522 | + $chr['Q'] = '212112'; | |
| 523 | + $chr['R'] = '212211'; | |
| 524 | + $chr['S'] = '211122'; | |
| 525 | + $chr['T'] = '211221'; | |
| 526 | + $chr['U'] = '221121'; | |
| 527 | + $chr['V'] = '222111'; | |
| 528 | + $chr['W'] = '112122'; | |
| 529 | + $chr['X'] = '112221'; | |
| 530 | + $chr['Y'] = '122121'; | |
| 531 | + $chr['Z'] = '123111'; | |
| 532 | + $chr['-'] = '121131'; | |
| 533 | + $chr['.'] = '311112'; | |
| 534 | + $chr[' '] = '311211'; | |
| 535 | + $chr['$'] = '321111'; | |
| 536 | + $chr['/'] = '112131'; | |
| 537 | + $chr['+'] = '113121'; | |
| 538 | + $chr['%'] = '211131'; | |
| 540 | 539 | $chr[128] = '121221'; // ($) |
| 541 | 540 | $chr[129] = '311121'; // (/) |
| 542 | 541 | $chr[130] = '122211'; // (+) |
| 543 | 542 | $chr[131] = '312111'; // (%) |
| 544 | - $chr[42] = '111141'; // start-stop | |
| 543 | + $chr['*'] = '111141'; | |
| 545 | 544 | $code = strtoupper($code); |
| 546 | 545 | $encode = array( |
| 547 | 546 | chr(0) => chr(131).'U', chr(1) => chr(128).'A', chr(2) => chr(128).'B', chr(3) => chr(128).'C', |
| 548 | 547 | chr(4) => chr(128).'D', chr(5) => chr(128).'E', chr(6) => chr(128).'F', chr(7) => chr(128).'G', |
| 549 | - chr(8) => chr(128).'H', chr(9) => chr(128).'I', chr(10) => chr(128).'J', chr(11) => '�K', | |
| 548 | + chr(8) => chr(128).'H', chr(9) => chr(128).'I', chr(10) => chr(128).'J', chr(11) => '£K', | |
| 550 | 549 | chr(12) => chr(128).'L', chr(13) => chr(128).'M', chr(14) => chr(128).'N', chr(15) => chr(128).'O', |
| 551 | 550 | chr(16) => chr(128).'P', chr(17) => chr(128).'Q', chr(18) => chr(128).'R', chr(19) => chr(128).'S', |
| 552 | 551 | chr(20) => chr(128).'T', chr(21) => chr(128).'U', chr(22) => chr(128).'V', chr(23) => chr(128).'W', |
| 553 | 552 | chr(24) => chr(128).'X', chr(25) => chr(128).'Y', chr(26) => chr(128).'Z', chr(27) => chr(131).'A', |
| @@ -578,22 +577,23 @@ | ||
| 578 | 577 | chr(124) => chr(131).'Q', chr(125) => chr(131).'R', chr(126) => chr(131).'S', chr(127) => chr(131).'T'); |
| 579 | 578 | $code_ext = ''; |
| 580 | 579 | $clen = strlen($code); |
| 581 | 580 | for ($i = 0 ; $i < $clen; ++$i) { |
| 582 | - if (ord($code{$i}) > 127) { | |
| 581 | + if (ord($code[$i]) > 127) { | |
| 583 | 582 | return false; |
| 584 | 583 | } |
| 585 | - $code_ext .= $encode[$code{$i}]; | |
| 584 | + $code_ext .= $encode[$code[$i]]; | |
| 586 | 585 | } |
| 587 | 586 | // checksum |
| 588 | - $code_ext .= $this->checksum_code93($code_ext); | |
| 587 | + $checkdigit = $this->checksum_code93($code); | |
| 588 | + $code .= $checkdigit ; | |
| 589 | 589 | // add start and stop codes |
| 590 | - $code = '*'.$code_ext.'*'; | |
| 590 | + $code = '*'.$code.'*'; | |
| 591 | 591 | $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); |
| 592 | 592 | $k = 0; |
| 593 | 593 | $clen = strlen($code); |
| 594 | 594 | for ($i = 0; $i < $clen; ++$i) { |
| 595 | - $char = ord($code{$i}); | |
| 595 | + $char = $code[$i]; | |
| 596 | 596 | if(!isset($chr[$char])) { |
| 597 | 597 | // invalid character |
| 598 | 598 | return false; |
| 599 | 599 | } |
| @@ -602,9 +602,9 @@ | ||
| 602 | 602 | $t = true; // bar |
| 603 | 603 | } else { |
| 604 | 604 | $t = false; // space |
| 605 | 605 | } |
| 606 | - $w = $chr[$char]{$j}; | |
| 606 | + $w = $chr[$char][$j]; | |
| 607 | 607 | $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); |
| 608 | 608 | $bararray['maxw'] += $w; |
| 609 | 609 | ++$k; |
| 610 | 610 | } |
| @@ -610,9 +610,10 @@ | ||
| 610 | 610 | } |
| 611 | 611 | } |
| 612 | 612 | $bararray['bcode'][$k] = array('t' => true, 'w' => 1, 'h' => 1, 'p' => 0); |
| 613 | 613 | $bararray['maxw'] += 1; |
| 614 | - ++$k; | |
| 614 | + ++$k; | |
| 615 | + $bararray['checkdigit'] = $checkdigit; | |
| 615 | 616 | return $bararray; |
| 616 | 617 | } |
| 617 | 618 | |
| 618 | 619 | /** |
| @@ -622,18 +623,17 @@ | ||
| 622 | 623 | $chars = array( |
| 623 | 624 | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', |
| 624 | 625 | 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', |
| 625 | 626 | 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', |
| 626 | - 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%', | |
| 627 | - '<', '=', '>', '?'); | |
| 627 | + 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%'); | |
| 628 | 628 | // translate special characters |
| 629 | - $code = strtr($code, chr(128).chr(131).chr(129).chr(130), '<=>?'); | |
| 629 | + $code = strtr($code, chr(128).chr(129).chr(130).chr(131), '$/+%'); | |
| 630 | 630 | $len = strlen($code); |
| 631 | 631 | // calculate check digit C |
| 632 | 632 | $p = 1; |
| 633 | 633 | $check = 0; |
| 634 | 634 | for ($i = ($len - 1); $i >= 0; --$i) { |
| 635 | - $k = array_keys($chars, $code{$i}); | |
| 635 | + $k = array_keys($chars, $code[$i]); | |
| 636 | 636 | $check += ($k[0] * $p); |
| 637 | 637 | ++$p; |
| 638 | 638 | if ($p > 20) { |
| 639 | 639 | $p = 1; |
| @@ -645,9 +645,9 @@ | ||
| 645 | 645 | // calculate check digit K |
| 646 | 646 | $p = 1; |
| 647 | 647 | $check = 0; |
| 648 | 648 | for ($i = $len; $i >= 0; --$i) { |
| 649 | - $k = array_keys($chars, $code{$i}); | |
| 649 | + $k = array_keys($chars, $code[$i]); | |
| 650 | 650 | $check += ($k[0] * $p); |
| 651 | 651 | ++$p; |
| 652 | 652 | if ($p > 15) { |
| 653 | 653 | $p = 1; |
| @@ -654,12 +654,9 @@ | ||
| 654 | 654 | } |
| 655 | 655 | } |
| 656 | 656 | $check %= 47; |
| 657 | 657 | $k = $chars[$check]; |
| 658 | - $checksum = $c.$k; | |
| 659 | - // resto respecial characters | |
| 660 | - $checksum = strtr($checksum, '<=>?', chr(128).chr(131).chr(129).chr(130)); | |
| 661 | - return $checksum; | |
| 658 | + return $c.$k; | |
| 662 | 659 | } |
| 663 | 660 | |
| 664 | 661 | /** |
| 665 | 662 | * Checksum for standard 2 of 5 barcodes. |
| @@ -702,9 +699,8 @@ | ||
| 702 | 699 | $chr['C'] = '110110100100'; |
| 703 | 700 | $chr['D'] = '110110100110'; |
| 704 | 701 | $chr['E'] = '110110110100'; |
| 705 | 702 | $chr['F'] = '110110110110'; |
| 706 | - $checkdigit = ''; | |
| 707 | 703 | if ($checksum) { |
| 708 | 704 | // add checksum |
| 709 | 705 | $clen = strlen($code); |
| 710 | 706 | $p = 2; |
| @@ -754,9 +750,8 @@ | ||
| 754 | 750 | $chr['6'] = '10111011101010'; |
| 755 | 751 | $chr['7'] = '10101011101110'; |
| 756 | 752 | $chr['8'] = '10101110111010'; |
| 757 | 753 | $chr['9'] = '10111010111010'; |
| 758 | - $checkdigit = ''; | |
| 759 | 754 | if ($checksum) { |
| 760 | 755 | // add checksum |
| 761 | 756 | $checkdigit = $this->checksum_s25($code); |
| 762 | 757 | $code .= $checkdigit ; |
| @@ -822,9 +817,8 @@ | ||
| 822 | 817 | $chr['8'] = '21121'; |
| 823 | 818 | $chr['9'] = '12121'; |
| 824 | 819 | $chr['A'] = '11'; |
| 825 | 820 | $chr['Z'] = '21'; |
| 826 | - $checkdigit = ''; | |
| 827 | 821 | if ($checksum) { |
| 828 | 822 | // add checksum |
| 829 | 823 | $checkdigit = $this->checksum_s25($code); |
| 830 | 824 | $code .= $checkdigit ; |
| @@ -876,9 +870,8 @@ | ||
| 876 | 870 | * C128 barcodes. |
| 877 | 871 | * Very capable code, excellent density, high reliability; in very wide use world-wide |
| 878 | 872 | */ |
| 879 | 873 | protected function barcode_c128($code, $type='B', $ean=false) { |
| 880 | - $code = strcode2utf($code); // mPDF 5.7.1 Allows e.g. <barcode code="5432
1068" type="C128A" /> | |
| 881 | 874 | $chr = array( |
| 882 | 875 | '212222', /* 00 */ |
| 883 | 876 | '222122', /* 01 */ |
| 884 | 877 | '222221', /* 02 */ |