Skip to content
Snippets Groups Projects
Commit 5437c183 authored by llaffont's avatar llaffont
Browse files

Intégration des algos vérif ISBN...

Intégration des algos vérif ISBN (http://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-13_check_digit_calculation)
parent 6d9aad88
Branches
Tags
No related merge requests found
......@@ -27,7 +27,7 @@ class Class_SuggestionAchat extends Storm_Model_Abstract {
protected $_default_attribute_values = array('date_creation' => '');
public function setIsbn($isbn) {
return parent::_set('isbn', preg_replace('/[^(0-9)]/', '', $isbn));
return parent::_set('isbn', preg_replace('/[\s\.\-\_]/', '', (string)$isbn));
}
......
......@@ -24,16 +24,41 @@ class ZendAfi_Validate_Isbn extends Zend_Validate_Abstract {
protected $_messageTemplates = array(self::INVALID_ISBN => "'%value%' n'est pas un ISBN valide");
public function isValid($value) {
if ('' === $valueString = (string) $value)
if ('' === $valueString = preg_replace('/[\s\.\-\_]/', '', (string)$value))
return true;
$this->_setValue($valueString);
if (strlen($valueString) !== 10) {
$this->_error(self::INVALID_ISBN);
if ($this->isISBN10Valid($valueString) || $this->isISBN13Valid($valueString))
return true;
$this->_error(self::INVALID_ISBN);
return false;
}
/** cf http://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-13_check_digit_calculation */
public function isISBN13Valid($n) {
$check = 0;
for ($i = 0; $i < 13; $i+=2) $check += substr($n, $i, 1);
for ($i = 1; $i < 12; $i+=2) $check += 3 * substr($n, $i, 1);
return $check % 10 == 0;
}
/** cf http://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation */
public function isISBN10Valid($ISBN10){
if(strlen($ISBN10) != 10)
return false;
$a = 0;
for($i = 0; $i < 10; $i++){
if ($ISBN10[$i] == "X"){
$a += 10*intval(10-$i);
} else { $a += intval($ISBN10[$i]) * intval(10-$i); }
}
return true;
return ($a % 11 == 0);
}
}
?>
\ No newline at end of file
?>
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment