isISSN.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = isISSN;
  6. var _assertString = require('./util/assertString');
  7. var _assertString2 = _interopRequireDefault(_assertString);
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. var issn = '^\\d{4}-?\\d{3}[\\dX]$';
  10. function isISSN(str) {
  11. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  12. (0, _assertString2.default)(str);
  13. var testIssn = issn;
  14. testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;
  15. testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');
  16. if (!testIssn.test(str)) {
  17. return false;
  18. }
  19. var issnDigits = str.replace('-', '');
  20. var position = 8;
  21. var checksum = 0;
  22. var _iteratorNormalCompletion = true;
  23. var _didIteratorError = false;
  24. var _iteratorError = undefined;
  25. try {
  26. for (var _iterator = issnDigits[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  27. var digit = _step.value;
  28. var digitValue = digit.toUpperCase() === 'X' ? 10 : +digit;
  29. checksum += digitValue * position;
  30. --position;
  31. }
  32. } catch (err) {
  33. _didIteratorError = true;
  34. _iteratorError = err;
  35. } finally {
  36. try {
  37. if (!_iteratorNormalCompletion && _iterator.return) {
  38. _iterator.return();
  39. }
  40. } finally {
  41. if (_didIteratorError) {
  42. throw _iteratorError;
  43. }
  44. }
  45. }
  46. return checksum % 11 === 0;
  47. }
  48. module.exports = exports['default'];