Posted By

tomaszsobczak on 01/16/10


Tagged

ISBN validator


Versions (?)

ISBN validator


 / Published in: PHP
 

  1. function is_valid_isbn($isbn_number)
  2. {
  3. $isbn_digits = array_filter(preg_split('//', $isbn_number, -1, PREG_SPLIT_NO_EMPTY), '_is_numeric_or_x');
  4. $isbn_length = count($isbn_digits);
  5. $isbn_sum = 0;
  6.  
  7. if((10 != $isbn_length) && (13 != $isbn_length))
  8. { return false; }
  9.  
  10. if(10 == $isbn_length)
  11. {
  12. foreach(range(1, 9) as $weight)
  13. { $isbn_sum += $weight * array_shift($isbn_digits); }
  14.  
  15. return (10 == ($isbn_mod = ($isbn_sum % 11))) ? ('x' == mb_strtolower(array_shift($isbn_digits), 'UTF-8')) : ($isbn_mod == array_shift($isbn_digits));
  16. }
  17.  
  18. if(13 == $isbn_length)
  19. {
  20. foreach(array(1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3) as $weight)
  21. { $isbn_sum += $weight * array_shift($isbn_digits); }
  22.  
  23. return (0 == ($isbn_mod = ($isbn_sum % 10))) ? (0 == array_shift($isbn_digits)) : ($isbn_mod == (10 - array_shift($isbn_digits)));
  24. }
  25.  
  26. return false;
  27. }
  28.  
  29. function _is_numeric_or_x($val)
  30. { return ('x' == mb_strtolower($val, 'UTF-8')) ? true : is_numeric($val); }

Report this snippet  

You need to login to post a comment.