isISIN.js 1.1 KB

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