| Code Coverage | ||||||||||
| Lines | Functions and Methods | Classes and Traits | ||||||||
| Total |  | 92.86% | 13 / 14 |  | 0.00% | 0 / 1 | CRAP |  | 0.00% | 0 / 1 | 
| C128c |  | 92.86% | 13 / 14 |  | 0.00% | 0 / 1 | 3.00 |  | 0.00% | 0 / 1 | 
| generateCodeString |  | 92.86% | 13 / 14 |  | 0.00% | 0 / 1 | 3.00 | |||
| 1 | <?php | 
| 2 | /** | 
| 3 | * Jingga | 
| 4 | * | 
| 5 | * PHP Version 8.1 | 
| 6 | * | 
| 7 | * @package phpOMS\Utils\Barcode | 
| 8 | * @copyright Dennis Eichhorn | 
| 9 | * @license OMS License 2.0 | 
| 10 | * @version 1.0.0 | 
| 11 | * @link https://jingga.app | 
| 12 | */ | 
| 13 | declare(strict_types=1); | 
| 14 | |
| 15 | namespace phpOMS\Utils\Barcode; | 
| 16 | |
| 17 | /** | 
| 18 | * Code 128c class. | 
| 19 | * | 
| 20 | * @package phpOMS\Utils\Barcode | 
| 21 | * @license OMS License 2.0 | 
| 22 | * @link https://jingga.app | 
| 23 | * @since 1.0.0 | 
| 24 | * | 
| 25 | * @SuppressWarnings(PHPMD.CamelCasePropertyName) | 
| 26 | * @SuppressWarnings(PHPMD.CamelCaseVariableName) | 
| 27 | */ | 
| 28 | class C128c extends BarAbstract | 
| 29 | { | 
| 30 | /** | 
| 31 | * Checksum. | 
| 32 | * | 
| 33 | * @var int | 
| 34 | * @since 1.0.0 | 
| 35 | */ | 
| 36 | protected static int $CHECKSUM = 105; | 
| 37 | |
| 38 | /** | 
| 39 | * Char weighted array. | 
| 40 | * | 
| 41 | * @var string[] | 
| 42 | * @since 1.0.0 | 
| 43 | */ | 
| 44 | protected static array $CODEARRAY = [ | 
| 45 | '00' => '212222', '01' => '222122', '02' => '222221', '03' => '121223', '04' => '121322', '05' => '131222', | 
| 46 | '06' => '122213', '07' => '122312', '08' => '132212', '09' => '221213', '10' => '221312', '11' => '231212', | 
| 47 | '12' => '112232', '13' => '122132', '14' => '122231', '15' => '113222', '16' => '123122', '17' => '123221', | 
| 48 | '18' => '223211', '19' => '221132', '20' => '221231', '21' => '213212', '22' => '223112', '23' => '312131', | 
| 49 | '24' => '311222', '25' => '321122', '26' => '321221', '27' => '312212', '28' => '322112', '29' => '322211', | 
| 50 | '30' => '212123', '31' => '212321', '32' => '232121', '33' => '111323', '34' => '131123', '35' => '131321', | 
| 51 | '36' => '112313', '37' => '132113', '38' => '132311', '39' => '211313', '40' => '231113', '41' => '231311', | 
| 52 | '42' => '112133', '43' => '112331', '44' => '132131', '45' => '113123', '46' => '113321', '47' => '133121', | 
| 53 | '48' => '313121', '49' => '211331', '50' => '231131', '51' => '213113', '52' => '213311', '53' => '213131', | 
| 54 | '54' => '311123', '55' => '311321', '56' => '331121', '57' => '312113', '58' => '312311', '59' => '332111', | 
| 55 | '60' => '314111', '61' => '221411', '62' => '431111', '63' => '111224', '64' => '111422', '65' => '121124', | 
| 56 | '66' => '121421', '67' => '141122', '68' => '141221', '69' => '112214', '70' => '112412', '71' => '122114', | 
| 57 | '72' => '122411', '73' => '142112', '74' => '142211', '75' => '241211', '76' => '221114', '77' => '413111', | 
| 58 | '78' => '241112', '79' => '134111', '80' => '111242', '81' => '121142', '82' => '121241', '83' => '114212', | 
| 59 | '84' => '124112', '85' => '124211', '86' => '411212', '87' => '421112', '88' => '421211', '89' => '212141', | 
| 60 | '90' => '214121', '91' => '412121', '92' => '111143', '93' => '111341', '94' => '131141', '95' => '114113', | 
| 61 | '96' => '114311', '97' => '411113', '98' => '411311', '99' => '113141', 'CODE B' => '114131', | 
| 62 | 'CODE A' => '311141', 'FNC 1' => '411131', 'Start A' => '211412', 'Start B' => '211214', 'Start C' => '211232', | 
| 63 | 'Stop' => '2331112', | 
| 64 | ]; | 
| 65 | |
| 66 | /** | 
| 67 | * Code start. | 
| 68 | * | 
| 69 | * @var string | 
| 70 | * @since 1.0.0 | 
| 71 | */ | 
| 72 | protected static string $CODE_START = '211232'; | 
| 73 | |
| 74 | /** | 
| 75 | * Code end. | 
| 76 | * | 
| 77 | * @var string | 
| 78 | * @since 1.0.0 | 
| 79 | */ | 
| 80 | protected static string $CODE_END = '2331112'; | 
| 81 | |
| 82 | /** | 
| 83 | * {@inheritdoc} | 
| 84 | */ | 
| 85 | protected function generateCodeString() : string | 
| 86 | { | 
| 87 | $keys = \array_keys(self::$CODEARRAY); | 
| 88 | $values = \array_flip($keys); | 
| 89 | $codeString = ''; | 
| 90 | $length = \strlen($this->content); | 
| 91 | $checksum = self::$CHECKSUM; | 
| 92 | $checkPos = 1; | 
| 93 | |
| 94 | for ($pos = 1; $pos <= $length; $pos += 2) { | 
| 95 | $activeKey = $pos + 1 <= $length | 
| 96 | ? \substr($this->content, ($pos - 1), 2) | 
| 97 | : \substr($this->content, ($pos - 1), 1) . '0'; | 
| 98 | |
| 99 | $codeString .= self::$CODEARRAY[$activeKey]; | 
| 100 | $checksum += $values[$activeKey] * $checkPos; | 
| 101 | ++$checkPos; | 
| 102 | } | 
| 103 | |
| 104 | return $codeString . self::$CODEARRAY[$keys[($checksum - ((int) ($checksum / 103) * 103))]]; | 
| 105 | } | 
| 106 | } |