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); }