Skip to content

Commit

Permalink
Merge pull request #8 from xi-project/luhn-validator
Browse files Browse the repository at this point in the history
Luhn validator
  • Loading branch information
puppe0 committed Nov 8, 2013
2 parents 99150ed + 62e061e commit 5a3bddf
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
13 changes: 13 additions & 0 deletions library/Xi/Algorithm/Luhn.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,17 @@ public function generate($number)

return (int) (implode('', array_reverse($digits)) . abs($stack));
}

/**
* Validates the given number.
*
* @param integer $number
* @return boolean
*/
public function validate($number)
{
$original = substr($number, 0, strlen($number) - 1);

return $this->generate($original) === $number;
}
}
55 changes: 55 additions & 0 deletions tests/Xi/Tests/Algorithm/LuhnTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,59 @@ public function luhnProvider()
array(456, 4564),
);
}

/**
* @test
* @dataProvider luhnValidProvider
*
* @param integer $number
* @param integer $expected
*/
public function validatesLuhnChecksum($number)
{
$luhn = new Luhn();

$this->assertTrue($luhn->validate($number));
}


/**
* @return array
*/
public function luhnValidProvider()
{
return array(
array(799273982),
array(1230),
array(4564),
);
}

/**
* @test
* @dataProvider luhnInvalidProvider
*
* @param integer $number
* @param integer $expected
*/
public function validatesInvalidLuhnChecksum($number)
{
$luhn = new Luhn();

$this->assertFalse($luhn->validate($number));
}


/**
* @return array
*/
public function luhnInvalidProvider()
{
return array(
array(799273983),
array(1231),
array(4565),
array(1),
);
}
}

0 comments on commit 5a3bddf

Please sign in to comment.