From 0e6dbb8899223f3edd251b37b416730934cc96b7 Mon Sep 17 00:00:00 2001 From: Joni Halme Date: Wed, 28 Nov 2018 09:25:38 +0200 Subject: [PATCH] fixed checksum calculation when remainder is 0, updated tests to match --- src/Modulus11.php | 9 ++++---- tests/Modulus11Test.php | 50 +++++++++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/Modulus11.php b/src/Modulus11.php index fc899ac..8831ed0 100644 --- a/src/Modulus11.php +++ b/src/Modulus11.php @@ -21,11 +21,12 @@ private static function getChecksum($number, $factors = null) $sum += ($sequence[$i] * $factor); } - $calculus = 11 - $sum % 11; + $remainder = $sum % 11; - switch($calculus){ - case 10: return 'X'; - default: return $calculus; + switch($remainder){ + case 0: return 0; + case 1: return 'X'; + default: return 11 - $remainder; } } diff --git a/tests/Modulus11Test.php b/tests/Modulus11Test.php index defa52d..18a1154 100644 --- a/tests/Modulus11Test.php +++ b/tests/Modulus11Test.php @@ -6,34 +6,46 @@ class Mod11Test extends \PHPUnit_Framework_TestCase { - protected $withCheckDigit1 = '1234.56.78903'; - protected $withoutCheckDigit1 = '1234.56.7890'; - protected $theCheckDigit1 = 3; - protected $withCheckDigit2 = '036522X'; - protected $withoutCheckDigit2 = '036522'; - protected $theCheckDigit2 = 'X'; - - public function testValidate() + public function provideValues() { - $this->assertTrue(Modulus11::validate($this->withCheckDigit1)); - $this->assertTrue(Modulus11::validate($this->withCheckDigit2)); + return array( + array('1234.56.78903', '1234.56.7890', 3), + array('036522X', '036522', 'X'), + array('01010104900', '0101010490', 0) + ); } - public function testCalculate() + /** + * @param string $withCheckDigit + * @dataProvider provideValues + */ + public function testValidate($withCheckDigit) { - $this->assertSame($this->theCheckDigit1, Modulus11::calculate($this->withoutCheckDigit1)); - $this->assertSame($this->theCheckDigit2, Modulus11::calculate($this->withoutCheckDigit2)); + $this->assertTrue(Modulus11::validate($withCheckDigit)); } - public function testAppendCheckDigit() + /** + * @param string $withCheckDigit + * @param string $withoutCheckDigit + * @param string|int $checkDigit + * @dataProvider provideValues + */ + public function testCalculate($withCheckDigit, $withoutCheckDigit, $checkDigit) { - $appended = Modulus11::appendCheckDigit($this->withoutCheckDigit1); - $this->assertSame($this->withoutCheckDigit1.$this->theCheckDigit1, $appended); - $this->assertTrue(Modulus11::validate($appended)); + $this->assertSame($checkDigit, Modulus11::calculate($withoutCheckDigit)); + } - $appended = Modulus11::appendCheckDigit($this->withoutCheckDigit2); - $this->assertSame($this->withoutCheckDigit2.$this->theCheckDigit2, $appended); + /** + * @param string $withCheckDigit + * @param string $withoutCheckDigit + * @param string|int $checkDigit + * @dataProvider provideValues + */ + public function testAppendCheckDigit($withCheckDigit, $withoutCheckDigit, $checkDigit) + { + $appended = Modulus11::appendCheckDigit($withoutCheckDigit); + $this->assertSame($withoutCheckDigit . $checkDigit, $appended); $this->assertTrue(Modulus11::validate($appended)); }