- Модуль: ui
- Путь к файлу: ~/bitrix/modules/ui/lib/barcode/barcodegenerator.php
- Класс: BitrixUIBarcodeBarcodeGenerator
- Вызов: BarcodeGenerator::qr_encode_data
private function qr_encode_data($data, $ecl) {
$mode = $this->qr_detect_mode($data);
$version = $this->qr_detect_version($data, $mode, $ecl);
$version_group = (($version < 10) ? 0 : (($version < 27) ? 1 : 2));
$ec_params = $this->qr_ec_params[($version - 1) * 4 + $ecl];
/* Don't cut off mid-character if exceeding capacity. */
$max_chars = $this->qr_capacity[$version - 1][$ecl][$mode];
if ($mode == 3) $max_chars <<= 1;
$data = substr($data, 0, $max_chars);
/* Convert from character level to bit level. */
switch ($mode) {
case 0:
$code = $this->qr_encode_numeric($data, $version_group);
break;
case 1:
$code = $this->qr_encode_alphanumeric($data, $version_group);
break;
case 2:
$code = $this->qr_encode_binary($data, $version_group);
break;
case 3:
$code = $this->qr_encode_kanji($data, $version_group);
break;
}
for ($i = 0; $i < 4; $i++) $code[] = 0;
while (count($code) % 8) $code[] = 0;
/* Convert from bit level to byte level. */
$data = array();
for ($i = 0, $n = count($code); $i < $n; $i += 8) {
$byte = 0;
if ($code[$i + 0]) $byte |= 0x80;
if ($code[$i + 1]) $byte |= 0x40;
if ($code[$i + 2]) $byte |= 0x20;
if ($code[$i + 3]) $byte |= 0x10;
if ($code[$i + 4]) $byte |= 0x08;
if ($code[$i + 5]) $byte |= 0x04;
if ($code[$i + 6]) $byte |= 0x02;
if ($code[$i + 7]) $byte |= 0x01;
$data[] = $byte;
}
for (
$i = count($data), $a = 1, $n = $ec_params[0];
$i < $n; $i++, $a ^= 1
) {
$data[] = $a ? 236 : 17;
}
/* Return. */
return array($mode, $version, $ec_params, $data);
}