summaryrefslogtreecommitdiff
path: root/vendor/chillerlan/php-qrcode/src/Data/Number.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/chillerlan/php-qrcode/src/Data/Number.php')
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/Number.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/vendor/chillerlan/php-qrcode/src/Data/Number.php b/vendor/chillerlan/php-qrcode/src/Data/Number.php
new file mode 100644
index 000000000..3936d12c3
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/Number.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Class Number
+ *
+ * @filesource Number.php
+ * @created 26.11.2015
+ * @package QRCode
+ * @author Smiley <[email protected]>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+
+use function ord, sprintf, substr;
+
+/**
+ * Numeric mode: decimal digits 0 through 9
+ */
+class Number extends QRDataAbstract{
+
+ /**
+ * @inheritdoc
+ */
+ protected $datamode = QRCode::DATA_NUMBER;
+
+ /**
+ * @inheritdoc
+ */
+ protected $lengthBits = [10, 12, 14];
+
+ /**
+ * @inheritdoc
+ */
+ protected function write(string $data):void{
+ $i = 0;
+
+ while($i + 2 < $this->strlen){
+ $this->bitBuffer->put($this->parseInt(substr($data, $i, 3)), 10);
+ $i += 3;
+ }
+
+ if($i < $this->strlen){
+
+ if($this->strlen - $i === 1){
+ $this->bitBuffer->put($this->parseInt(substr($data, $i, $i + 1)), 4);
+ }
+ elseif($this->strlen - $i === 2){
+ $this->bitBuffer->put($this->parseInt(substr($data, $i, $i + 2)), 7);
+ }
+
+ }
+
+ }
+
+ /**
+ * @param string $string
+ *
+ * @return int
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ protected function parseInt(string $string):int{
+ $num = 0;
+
+ $len = strlen($string);
+ for($i = 0; $i < $len; $i++){
+ $c = ord($string[$i]);
+
+ if(!in_array($string[$i], $this::NUMBER_CHAR_MAP, true)){
+ throw new QRCodeDataException(sprintf('illegal char: "%s" [%d]', $string[$i], $c));
+ }
+
+ $c = $c - 48; // ord('0')
+ $num = $num * 10 + $c;
+ }
+
+ return $num;
+ }
+
+}