isbn.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.validate.isbn"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojox.validate.isbn"] = true;
  8. dojo.provide("dojox.validate.isbn");
  9. // summary: Provides ISBN validation functions in `dojox.validate`
  10. //
  11. dojox.validate.isValidIsbn = function(/* String */value) {
  12. // summary: Validate ISBN-10 or ISBN-13 based on the length of value
  13. // value: String
  14. // An ISBN to validate
  15. // returns: Boolean
  16. var len, sum = 0, weight;
  17. if(!dojo.isString(value)){
  18. value = String(value);
  19. }
  20. value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces
  21. len = value.length;
  22. switch(len){
  23. case 10:
  24. weight = len;
  25. // ISBN-10 validation algorithm
  26. for(var i = 0; i < 9; i++){
  27. sum += parseInt(value.charAt(i)) * weight;
  28. weight--;
  29. }
  30. var t = value.charAt(9).toUpperCase();
  31. sum += t == 'X' ? 10 : parseInt(t);
  32. return sum % 11 == 0; // Boolean
  33. break;
  34. case 13:
  35. weight = -1;
  36. for(var i = 0; i< len; i++){
  37. sum += parseInt(value.charAt(i)) * (2 + weight);
  38. weight *= -1;
  39. }
  40. return sum % 10 == 0; // Boolean
  41. break;
  42. }
  43. return false;
  44. }
  45. }