- Модуль: ui
- Путь к файлу: ~/bitrix/modules/ui/lib/barcode/barcodegenerator.php
- Класс: BitrixUIBarcodeBarcodeGenerator
- Вызов: BarcodeGenerator::upc_e_normalize
private function upc_e_normalize($data) {
$data = preg_replace('/[^0-9*]/', '', $data);
/* If exactly 8 digits, use verbatim even if check digit is wrong. */
if (preg_match(
'/^([01])([0-9][0-9][0-9][0-9][0-9][0-9])([0-9])$/',
$data, $m
)) {
return $data;
}
/* If unknown check digit, use verbatim but calculate check digit. */
if (preg_match(
'/^([01])([0-9][0-9][0-9][0-9][0-9][0-9])([*])$/',
$data, $m
)) {
$data = $this->upc_a_normalize($data);
return $m[1] . $m[2] . substr($data, -1);
}
/* Otherwise normalize to UPC-A and convert back. */
$data = $this->upc_a_normalize($data);
if (preg_match(
'/^([01])([0-9][0-9])([0-2])0000([0-9][0-9][0-9])([0-9])$/',
$data, $m
)) {
return $m[1] . $m[2] . $m[4] . $m[3] . $m[5];
}
if (preg_match(
'/^([01])([0-9][0-9][0-9])00000([0-9][0-9])([0-9])$/',
$data, $m
)) {
return $m[1] . $m[2] . $m[3] . '3' . $m[4];
}
if (preg_match(
'/^([01])([0-9][0-9][0-9][0-9])00000([0-9])([0-9])$/',
$data, $m
)) {
return $m[1] . $m[2] . $m[3] . '4' . $m[4];
}
if (preg_match(
'/^([01])([0-9][0-9][0-9][0-9][0-9])0000([5-9])([0-9])$/',
$data, $m
)) {
return $m[1] . $m[2] . $m[3] . $m[4];
}
return str_repeat('0', 8);
}