isbn3
Version: 
ISBN utils: parse, validate, format, audit
33 lines (28 loc) • 994 B
JavaScript
const groups = require('./groups')
const groupsMap = {}
Object.keys(groups).forEach(groupPrefix => {
  const [ prefix, group ] = groupPrefix.split('-')
  const groupFirstDigit = group[0]
  groupsMap[prefix] = groupsMap[prefix] || {}
  groupsMap[prefix][groupFirstDigit] = groupsMap[prefix][groupFirstDigit] || {}
  groupsMap[prefix][groupFirstDigit][group] = groups[groupPrefix]
})
module.exports = isbn13 => {
  const prefix = isbn13.substring(0, 3)
  if (!groupsMap[prefix]) return null
  const restAfterPrefix = isbn13.substring(3)
  const groupFirstDigit = restAfterPrefix[0]
  const prefixMap = groupsMap[prefix]
  if (!prefixMap) return null
  const possibleGroups = prefixMap[groupFirstDigit]
  for (let groupPrefix in possibleGroups) {
    if (restAfterPrefix.startsWith(groupPrefix)) {
      return {
        group: groupPrefix,
        ranges: possibleGroups[groupPrefix].ranges,
        restAfterGroup: restAfterPrefix.slice(groupPrefix.length)
      }
    }
  }
  return null
}