Exemplo n.º 1
0
 function createData($typeNumber, $errorCorrectLevel, $dataArray)
 {
     $rsBlocks = QRRSBlock::getRSBlocks($typeNumber, $errorCorrectLevel);
     $buffer = new QRBitBuffer();
     for ($i = 0; $i < count($dataArray); $i++) {
         $data = $dataArray[$i];
         $buffer->put($data->getMode(), 4);
         $buffer->put($data->getLength(), $data->getLengthInBits($typeNumber));
         $data->write($buffer);
     }
     $totalDataCount = 0;
     for ($i = 0; $i < count($rsBlocks); $i++) {
         $totalDataCount += $rsBlocks[$i]->getDataCount();
     }
     if ($buffer->getLengthInBits() > $totalDataCount * 8) {
         trigger_error("code length overflow. (" . $buffer->getLengthInBits() . ">" . $totalDataCount * 8 . ")", E_USER_ERROR);
     }
     // end code.
     if ($buffer->getLengthInBits() + 4 <= $totalDataCount * 8) {
         $buffer->put(0, 4);
     }
     // padding
     while ($buffer->getLengthInBits() % 8 != 0) {
         $buffer->putBit(false);
     }
     // padding
     while (true) {
         if ($buffer->getLengthInBits() >= $totalDataCount * 8) {
             break;
         }
         $buffer->put(QR_PAD0, 8);
         if ($buffer->getLengthInBits() >= $totalDataCount * 8) {
             break;
         }
         $buffer->put(QR_PAD1, 8);
     }
     return QRCode::createBytes($buffer, $rsBlocks);
 }