function validIsin(src) {

var s = 0;

var a = (src.length == 12) ? 1 : 2;

for (var i = src.length - 1; i >= 0; i--) {

var c = src.charCodeAt(i);

if (c > '9'.charCodeAt(0)) {

c -= ('A'.charCodeAt(0) - 10);

s += (3 - a) * Math.floor(c / 10) + a * c + Math.floor((a - 1) * (c % 10) / 5);

} else {

c -= '0'.charCodeAt(0);

s += a * c + (a - 1) * Math.floor(c / 5);

a = 3 - a;

}

}

s %= 10;

return ((10 - s % 10) % 10) == 0;

}

var s = 0;

var a = (src.length == 12) ? 1 : 2;

for (var i = src.length - 1; i >= 0; i--) {

var c = src.charCodeAt(i);

if (c > '9'.charCodeAt(0)) {

c -= ('A'.charCodeAt(0) - 10);

s += (3 - a) * Math.floor(c / 10) + a * c + Math.floor((a - 1) * (c % 10) / 5);

} else {

c -= '0'.charCodeAt(0);

s += a * c + (a - 1) * Math.floor(c / 5);

a = 3 - a;

}

}

s %= 10;

return ((10 - s % 10) % 10) == 0;

}