UNPKG

1.07 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = isISIN;
7
8var _assertString = _interopRequireDefault(require("./util/assertString"));
9
10function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
12var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;
13
14function isISIN(str) {
15 (0, _assertString.default)(str);
16
17 if (!isin.test(str)) {
18 return false;
19 }
20
21 var checksumStr = str.replace(/[A-Z]/g, function (character) {
22 return parseInt(character, 36);
23 });
24 var sum = 0;
25 var digit;
26 var tmpNum;
27 var shouldDouble = true;
28
29 for (var i = checksumStr.length - 2; i >= 0; i--) {
30 digit = checksumStr.substring(i, i + 1);
31 tmpNum = parseInt(digit, 10);
32
33 if (shouldDouble) {
34 tmpNum *= 2;
35
36 if (tmpNum >= 10) {
37 sum += tmpNum + 1;
38 } else {
39 sum += tmpNum;
40 }
41 } else {
42 sum += tmpNum;
43 }
44
45 shouldDouble = !shouldDouble;
46 }
47
48 return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10;
49}
50
51module.exports = exports.default;
\No newline at end of file