From 77a820a2eb4aa9e2a46637b8d45899d90dc7984a Mon Sep 17 00:00:00 2001 From: Bostjan Rihter Date: Mon, 26 Mar 2018 05:39:54 +0200 Subject: [PATCH] Fixed version regression due to off-by-one error and added a test. --- src/Data/QRMatrix.php | 5 +++- tests/Data/QRMatrixTest.php | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/Data/QRMatrix.php mode change 100644 => 100755 tests/Data/QRMatrixTest.php diff --git a/src/Data/QRMatrix.php b/src/Data/QRMatrix.php old mode 100644 new mode 100755 index 38e8c4b07..0bbb45636 --- a/src/Data/QRMatrix.php +++ b/src/Data/QRMatrix.php @@ -82,7 +82,10 @@ class QRMatrix{ /** * @link http://www.thonky.com/qr-code-tutorial/format-version-tables */ - const versionPattern = [ // no version pattern for QR Codes < 7 + const versionPattern = [ + // 1-based version index + null, + // no version pattern for QR Codes < 7 null , null , null , null , null , null , 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, diff --git a/tests/Data/QRMatrixTest.php b/tests/Data/QRMatrixTest.php old mode 100644 new mode 100755 index 5c379f79a..bbbb5a5de --- a/tests/Data/QRMatrixTest.php +++ b/tests/Data/QRMatrixTest.php @@ -22,6 +22,46 @@ class QRMatrixTest extends QRTestAbstract{ protected $version = 7; + /** + * @link http://www.thonky.com/qr-code-tutorial/format-version-tables + */ + const VERSION_REF = [ + 7 => '000111110010010100', + 8 => '001000010110111100', + 9 => '001001101010011001', + 10 => '001010010011010011', + 11 => '001011101111110110', + 12 => '001100011101100010', + 13 => '001101100001000111', + 14 => '001110011000001101', + 15 => '001111100100101000', + 16 => '010000101101111000', + 17 => '010001010001011101', + 18 => '010010101000010111', + 19 => '010011010100110010', + 20 => '010100100110100110', + 21 => '010101011010000011', + 22 => '010110100011001001', + 23 => '010111011111101100', + 24 => '011000111011000100', + 25 => '011001000111100001', + 26 => '011010111110101011', + 27 => '011011000010001110', + 28 => '011100110000011010', + 29 => '011101001100111111', + 30 => '011110110101110101', + 31 => '011111001001010000', + 32 => '100000100111010101', + 33 => '100001011011110000', + 34 => '100010100010111010', + 35 => '100011011110011111', + 36 => '100100101100001011', + 37 => '100101010000101110', + 38 => '100110101001100100', + 39 => '100111010101000001', + 40 => '101000110001101001' + ]; + /** * @var \chillerlan\QRCode\Data\QRMatrix */ @@ -61,6 +101,15 @@ class QRMatrixTest extends QRTestAbstract{ $this->assertSame($this->version, $this->matrix->version()); } + public function testVersionPattern() { + foreach (self::VERSION_REF as $version => $mask) { + $hexRef = base_convert(self::VERSION_REF[$version],2 ,16); + $hexImpl = dechex(QRMatrix::versionPattern[$version]); + + $this->assertEquals($hexRef, $hexImpl); + } + } + public function testECC(){ $this->assertSame(QRCode::ECC_L, $this->matrix->eccLevel()); }