You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
968 B
41 lines
968 B
define(["dojo/_base/lang", "./_base"], function(lang, validate){ |
|
|
|
validate.isValidIsbn = function(/* String */value) { |
|
// summary: |
|
// Validate ISBN-10 or ISBN-13 based on the length of value |
|
// value: String |
|
// An ISBN to validate |
|
// returns: Boolean |
|
var len, sum = 0, weight; |
|
if(!lang.isString(value)){ |
|
value = String(value); |
|
} |
|
value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces |
|
len = value.length; |
|
|
|
switch(len){ |
|
case 10: |
|
weight = len; |
|
// ISBN-10 validation algorithm |
|
for(var i = 0; i < 9; i++){ |
|
sum += parseInt(value.charAt(i)) * weight; |
|
weight--; |
|
} |
|
var t = value.charAt(9).toUpperCase(); |
|
sum += t == 'X' ? 10 : parseInt(t); |
|
return sum % 11 == 0; // Boolean |
|
break; |
|
case 13: |
|
weight = -1; |
|
for(var i = 0; i< len; i++){ |
|
sum += parseInt(value.charAt(i)) * (2 + weight); |
|
weight *= -1; |
|
} |
|
return sum % 10 == 0; // Boolean |
|
break; |
|
} |
|
return false; |
|
}; |
|
|
|
return validate.isValidIsbn; |
|
});
|
|
|