(in-package #:isbn) (defvar *isbn-group-ranges* (let ((ht (make-hash-table :test #'equal))) (setf (gethash "978" ht) '(("0" 1) ("6" nil) ("7" 1) ("80" 2) ("950" 3) ("9900" 4) ("99900" 5))) ht) "Hash table containing a group range specification for each prefix.") (defparameter *groups-without-x* "82" "Areas (countries) for which the control digit X is not used.") (defvar *isbn-registrant-ranges* (let ((ht (make-hash-table :test #'equal)) (registrant-ranges '(("0" ("00" "200" "7000" "85000" "900000" "9500000")) ("1" ("00" "100" "4000" "55000" "869800" "9990000")) ("2" ("00" "200" "35000" "400" "700" "84000" "900000" "9500000")) ("3" ("00" "030" "0340" "03700" "04" "200" "7000" "85000" "900000" "9500000")) ("4" ("00" "200" "7000" "85000" "900000" "9500000")) ("5" ("00" "200" "7000" "85000" "900000" "91000" "9200" "93000" "9500" "98000" "9900000" "9910")) ("7" ("00" "100" "5000" "80000" "900000")) ("80" ("00" "200" "7000" "85000" "900000")) ("81" ("00" "200" "7000" "85000" "900000")) ("82" ("00" "200" "7000" "90000" "990000")) ("83" ("00" "200" "60000" "7000" "85000" "900000")) ("84" ("00" "200" "7000" "85000" "9000" "920000" "92400" "930000" "95000" "9700")) ("85" ("00" "200" "60000" "7000" "85000" "900000" "98000")) ("86" ("00" "300" "7000" "80000" "900000")) ("87" ("00" "400" "7000" "85000" "970000")) ("88" ("00" "200" "6000" "85000" "900000")) ("89" ("00" "250" "5500" "85000" "950000")) ("90" ("00" "200" "5000" "70000" "800000" "8500" "900000" "940000")) ("91" ("0" "20" "500" "7000" "85000" "970000")) ("92" ("0" "60" "800" "9000" "95000" "990000")) ("950" ("00" "500" "9000" "99000")) ("951" ("0" "20" "550" "8900" "95000")) ("952" ("00" "200" "5000" "60" "6600" "67000" "7000" "89" "9500" "99000")) ("953" ("0" "10" "150" "6000" "95000")) ("954" ("00" "300" "8000" "90000" "9300")) ("955" ("0" "1000" "20" "550" "8000" "95000")) ("956" ("00" "200" "7000")) ("957" ("00" "0300" "05" "2000" "21" "28000" "31" "440" "8200" "97000")) ("958" ("00" "600" "8000" "95000")) ("959" ("00" "200" "7000")) ("960" ("00" "200" "6600" "690" "7000" "85000")) ("961" ("00" "200" "6000" "90000")) ("962" ("00" "200" "7000" "85000" "8700" "900")) ("963" ("00" "200" "7000" "85000" "9000")) ("964" ("00" "300" "5500" "90000" "970" "9900")) ("965" ("00" "200" "7000" "90000")) ("966" ("00" "300" "7000" "90000")) ("967" ("0" "60" "900" "9900" "99900")) ("968" ("01" "400" "5000" "800")) ("969" ("0" "20" "400" "8000")) ("970" ("01" "600" "9000" "91000" "9700")) ("971" ("000" "02" "0300" "06" "10" "500" "8500" "91000")) ("972" ("0" "20" "550" "8000" "95000")) ("973" ("0" "20" "550" "7600" "85000" "9000" "95000")) ("974" ("00" "200" "7000" "85000" "90000" "9500")) ("975" ("00000" "01" "250" "6000" "92000" "990")) ("976" ("0" "40" "600" "8000" "95000")) ("977" ("00" "200" "5000" "700")) ("978" ("000" "2000" "30000" "8000" "900")) ("979" ("0" "20" "3000" "400" "8000" "95000")) ("980" ("00" "200" "6000")) ("981" ("00" "200" "3000")) ("982" ("00" "100" "70" "9000")) ("983" ("00" "020" "2000" "40000" "50" "800" "9000" "99000")) ("984" ("00" "400" "8000" "90000")) ("985" ("00" "400" "6000" "90000")) ("986" ("00" "120" "5600" "80000")) ("987" ("00" "1000" "20000" "30" "500" "9000" "95000")) ("988" ("00" "200" "8000" "97000")) ("989" ("0" "20" "550" "8000" "95000")) ("9945" ("00" "400" "8500")) ("9946" ("0" "20" "400" "9000")) ("9947" ("0" "20" "800")) ("9948" ("00" "400" "8500")) ("9949" ("0" "10" "400" "9000")) ("9950" ("00" "300" "8500")) ("9951" ("00" "400" "8500")) ("9952" ("0" "20" "400" "8000")) ("9953" ("0" "10" "400" "60" "9000")) ("9954" ("0" "20" "400" "8000")) ("9955" ("00" "400" "9300")) ("9956" ("0" "10" "400" "9000")) ("9957" ("00" "400" "8500")) ("9958" ("0" "10" "500" "9000")) ("9959" ("0" "20" "800" "9500")) ("9960" ("00" "600" "9000")) ("9961" ("0" "30" "70009500")) ("9962" ("00" "5500" "56" "600" "8500")) ("9963" ("0" "30" "550" "7500")) ("9964" ("0" "70" "950")) ("9965" ("00" "400" "9000")) ("9966" ("00" "7000" "750" "9600")) ("9967" ("00" "400" "9000")) ("9968" ("00" "500" "9400")) ("9970" ("00" "400" "9000")) ("9971" ("0" "60" "900" "9900")) ("9972" ("00" "1" "200" "2500" "30" "600" "9000")) ("9973" ("0" "10" "700" "9700")) ("9974" ("0" "30" "550" "7500" "95")) ("9975" ("0" "50" "900" "9500")) ("9976" ("0" "60" "900" "9990")) ("9977" ("00" "900" "9900")) ("9978" ("00" "300" "40" "950" "9900")) ("9979" ("0" "50" "760" "9000")) ("9980" ("0" "40" "900" "9900")) ("9981" ("00" "100" "1600" "20" "800" "9500")) ("9982" ("00" "800" "9900" "80" "950" "9900")) ("9984" ("00" "500" "9000")) ("9985" ("0" "50" "800" "9000")) ("9986" ("00" "400" "9000" "940" "97")) ("9987" ("00" "400" "8800")) ("9988" ("0" "30" "550" "7500")) ("9989" ("0" "100" "2000" "30" "600" "9500")) ("99901" ("00" "500" "80")) ("99903" ("0" "20" "900")) ("99904" ("0" "60" "900")) ("99905" ("0" "40" "800")) ("99906" ("0" "30" "600" "70" "9")) ("99908" ("0" "10" "900")) ("99909" ("0" "40" "950")) ("99910" ("0" "30" "900")) ("99911" ("00" "600")) ("99912" ("0" "500" "60" "900")) ("99913" ("0" "30" "600")) ("99914" ("0" "50" "900")) ("99915" ("0" "50" "800")) ("99916" ("0" "30" "700")) ("99917" ("0" "30" "900")) ("99918" ("0" "40" "800")) ("99919" ("0" "40" "900")) ("99920" ("0" "50" "900")) ("99921" ("0" "20" "700")) ("99921" ("8" "90")) ("99922" ("0" "40" "700")) ("99923" ("0" "20" "800")) ("99924" ("0" "30" "800")) ("99925" ("0" "40" "800")) ("99926" ("0" "10" "600")) ("99927" ("0" "30" "600")) ("99928" ("0" "10" "800")) ("99930" ("0" "50" "800")) ("99931" ("0" "50" "800")) ("99932" ("0" "10" "600" "7" "80")) ("99933" ("0" "30" "600")) ("99934" ("0" "20" "800")) ("99935" ("0" "30" "600" "8" "90")) ("99936" ("0" "10" "600")) ("99937" ("0" "20" "600")) ("99938" ("0" "30" "600")) ("99939" ("0" "60" "900")) ("99940" ("0" "10" "700")) ("99941" ("0" "30" "900")) ("99942" ("0" "50" "800")) ("99943" ("0" "30" "600")) ("99944" ("0" "50" "800")) ("99945" ("0" "60" "900")) ("99946" ("0" "30" "600")) ("99947" nil) ("99948" ("0" "50" "800")) ("99949" ("0" "20" "900"))))) (loop for (area ranges) in registrant-ranges do (setf (gethash area ht) (mapcar (lambda (range-start) (list range-start (length range-start))) ranges))) ht) "Hash table containing a registrant range specification for each group.")