Example #1
0
 public function eat8()
 {
     $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());
     $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());
     $p = 1;
     $dataStrLen = strlen($this->dataStr);
     while ($p < $dataStrLen) {
         $mode = $this->identifyMode($p);
         if ($mode == QR_MODE_KANJI) {
             break;
         }
         if ($mode == QR_MODE_NUM) {
             $q = $p;
             while (self::isdigitat($this->dataStr, $q)) {
                 $q++;
             }
             $dif = QRinput::estimateBitsMode8($p) + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - QRinput::estimateBitsMode8($q);
             // - 4 - l8
             if ($dif < 0) {
                 break;
             } else {
                 $p = $q;
             }
         } else {
             if ($mode == QR_MODE_AN) {
                 $q = $p;
                 while (self::isalnumat($this->dataStr, $q)) {
                     $q++;
                 }
                 $dif = QRinput::estimateBitsMode8($p) + QRinput::estimateBitsModeAn($q - $p) + 4 + $la - QRinput::estimateBitsMode8($q);
                 // - 4 - l8
                 if ($dif < 0) {
                     break;
                 } else {
                     $p = $q;
                 }
             } else {
                 $p++;
             }
         }
     }
     $run = $p;
     $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr));
     if ($ret < 0) {
         return -1;
     }
     return $run;
 }
Example #2
0
 public static function lengthOfCode($mode, $version, $bits)
 {
     $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version);
     switch ($mode) {
         case Constants::QR_MODE_NUM:
             $chunks = (int) ($payload / 10);
             $remain = $payload - $chunks * 10;
             $size = $chunks * 3;
             if ($remain >= 7) {
                 $size += 2;
             } else {
                 if ($remain >= 4) {
                     $size += 1;
                 }
             }
             break;
         case Constants::QR_MODE_AN:
             $chunks = (int) ($payload / 11);
             $remain = $payload - $chunks * 11;
             $size = $chunks * 2;
             if ($remain >= 6) {
                 $size++;
             }
             break;
         case Constants::QR_MODE_8:
             $size = (int) ($payload / 8);
             break;
         case Constants::QR_MODE_KANJI:
             $size = (int) ($payload / 13 * 2);
             break;
         case Constants::QR_MODE_STRUCTURE:
             $size = (int) ($payload / 8);
             break;
         default:
             $size = 0;
             break;
     }
     $maxsize = QRspec::maximumWords($mode, $version);
     if ($size < 0) {
         $size = 0;
     }
     if ($size > $maxsize) {
         $size = $maxsize;
     }
     return $size;
 }
Example #3
0
 public function estimateBitStreamSizeOfEntry($version)
 {
     $bits = 0;
     if ($version == 0) {
         $version = 1;
     }
     switch ($this->mode) {
         case QR_MODE_NUM:
             $bits = QRinput::estimateBitsModeNum($this->size);
             break;
         case QR_MODE_AN:
             $bits = QRinput::estimateBitsModeAn($this->size);
             break;
         case QR_MODE_8:
             $bits = QRinput::estimateBitsMode8($this->size);
             break;
         case QR_MODE_KANJI:
             $bits = QRinput::estimateBitsModeKanji($this->size);
             break;
         case QR_MODE_STRUCTURE:
             return STRUCTURE_HEADER_BITS;
         default:
             return 0;
     }
     $l = QRspec::lengthIndicator($this->mode, $version);
     $m = 1 << $l;
     $num = (int) (($this->size + $m - 1) / $m);
     $bits += $num * (4 + $l);
     return $bits;
 }
Example #4
0
 public function eat8()
 {
     $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());
     $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());
     $p = 1;
     //$dataStrLen = strlen($this->dataStr);
     $dataStrLen = mb_strlen($this->dataStr, 'CP1251');
     $_str = $this->dataStr;
     $_p = 0;
     while ($p < $dataStrLen) {
         $mode = $this->identifyMode($p);
         if ($mode == QR_MODE_KANJI) {
             break;
         }
         if ($mode == QR_MODE_NUM) {
             $q = $p;
             while (self::isdigitat($this->dataStr, $q)) {
                 $q++;
             }
             $dif = QRinput::estimateBitsMode8($p) + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - QRinput::estimateBitsMode8($q);
             // - 4 - l8
             if ($dif < 0) {
                 break;
             } else {
                 $p = $q;
             }
         } else {
             if ($mode == QR_MODE_AN) {
                 $q = $p;
                 while (self::isalnumat($this->dataStr, $q)) {
                     $q++;
                 }
                 $dif = QRinput::estimateBitsMode8($p) + QRinput::estimateBitsModeAn($q - $p) + 6 + $la - QRinput::estimateBitsMode8($q);
                 // - 4 - l8
                 if ($dif < 0) {
                     break;
                 } else {
                     $p = $q;
                 }
             } else {
                 if (BX_UTF === true) {
                     $value = ord($_str[$p]);
                     if ($value > 127) {
                         if ($value >= 192 && $value <= 223) {
                             $s = 1;
                         } elseif ($value >= 224 && $value <= 239) {
                             $s = 2;
                         } elseif ($value >= 240 && $value <= 247) {
                             $s = 3;
                         }
                     } else {
                         $s = 0;
                     }
                     $p = $p + $s;
                     $_p = $_p + $s;
                 }
                 $p++;
             }
         }
     }
     $run = $p;
     $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr));
     if ($ret < 0) {
         return -1;
     }
     return $run - $_p;
 }