Use shorter format for barcodes, to generate shorter (better readable) barcodes.

This commit is contained in:
Jan Böhmer 2020-05-07 23:11:50 +02:00
parent f9f2774f36
commit 3dd0ef26b3
4 changed files with 22 additions and 9 deletions

View file

@ -69,15 +69,15 @@ class BarcodeContentGenerator
/**
* Returns a Code that can be used in a 1D barcode.
* The return value has a format of "L-000123"
* The return value has a format of "L0123"
* @param AbstractDBElement $target
* @return string
*/
public function get1DBarcodeContent(AbstractDBElement $target): string
{
$prefix = $this->classToString(self::PREFIX_MAP, $target);
$id = sprintf('%06d', $target->getID());
return $prefix . '-' . $id;
$id = sprintf('%04d', $target->getID());
return $prefix . $id;
}
protected function classToString(array $map, object $target): string

View file

@ -48,7 +48,18 @@ class BarcodeNormalizer
return [$matches[1], (int) $matches[2]];
}
//New Code39 barcodes use L-000001 format
//New Code39 barcode use L0001 format
if (preg_match('#^([A-Z])(\d{4,})$#', $input, $matches)) {
$prefix = $matches[1];
$id = (int) $matches[2];
if (!isset(self::PREFIX_TYPE_MAP[$prefix])) {
throw new \InvalidArgumentException('Unknown prefix ' . $prefix);
}
return [self::PREFIX_TYPE_MAP[$prefix], $id];
}
//During development the L-000001 format was used
if (preg_match('#^(\w)-(\d{6,})$#', $input, $matches)) {
$prefix = $matches[1];
$id = (int) $matches[2];