@konfirm/iso7064
Version:
ISO/IEC 7064:2003 - Check character systems
3 lines (2 loc) • 5.01 kB
JavaScript
"use strict";function t(t){return null===t?"null":Array.isArray(t)?"array":typeof t}let e=class extends Error{constructor(e){super(`Alphabets requires a string(able), got (${t(e)}) ${e}`);const{constructor:r,constructor:{name:n}}=this;this.name=n,Error.captureStackTrace(this,r)}},r=class extends Error{constructor(t,e){super(`Alphabets cannot contain duplicate characters, found "${e}" in "${t}"`);const{constructor:r,constructor:{name:n}}=this;this.name=n,Error.captureStackTrace(this,r)}};const n=new WeakMap;class s{constructor(s="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"){const a=/string|object/.test(t(s))?String(s):"";const o=Array.from(a),i=o.filter(((t,e,r)=>r.indexOf(t)!==e)).join("");if(!a.length)throw new e(s);if(i.length)throw new r(a,i);n.set(this,{characters:a,alphabet:o})}get characters(){const{characters:t}=n.get(this);return t}get byteLength(){return this.characters.length}get length(){const{alphabet:{length:t}}=n.get(this);return t}slice(t,e){const{alphabet:r}=n.get(this),{constructor:s}=Object.getPrototypeOf(this);return s.from(r.slice(t,e).join(""))}charAt(t){const{alphabet:e}=n.get(this);return e[t]}charCodeAt(t){const{characters:e,length:r}=this;return t>=0&&t<r?e.charCodeAt(t):void 0}codePointAt(t){const e=this.charAt(t);return e?e.codePointAt(0):void 0}indexOf(t){const{alphabet:e}=n.get(this);return e.indexOf(t)}map(...t){const{length:e}=this,r=t=>t<0?r(e+t):t;return t.map((t=>this.charAt(r(t)%e)))}toString(){return this.characters}toJSON(){return String(this)}static from(t){n.has(this)||n.set(this,new Map);const e=n.get(this);return e.has(t)||e.set(t,new this(t)),e.get(t)}}const a=new WeakMap;class o{constructor(t={}){a.set(this,t)}get algorithm(){const{algorithm:t}=a.get(this);return t||"Custom"}get specification(){const{algorithm:t}=this;return`ISO 7064, ${t}`}get designation(){const{designation:t}=a.get(this);return t||0}get indices(){const{indices:t,alphabet:e}=a.get(this);return t||e}get alphabet(){const{alphabet:t}=a.get(this);return t}get modulus(){const{modulus:t,alphabet:e}=a.get(this);return t||e&&e.length}get radix(){const{radix:t}=a.get(this);return t}get double(){const{double:t}=a.get(this);return t||!1}normalize(t){const{indices:e="a-zA-Z0-9"}=this,r=new RegExp(`[^${e}]+`,"g");return String(t).toUpperCase().replace(r,"")}checksum(t){throw new Error("Checksum method not implemented")}validate(t){const{indices:e,alphabet:r,double:n}=this,s=new RegExp(`([${e}]+)([${r}]{${Number(n)+1}})`),a=this.normalize(t).match(s);if(a){const[,t,e]=a;return this.checksum(t)===e}return!1}generate(t){return`${this.normalize(t)}${this.checksum(t)}`}factory(t={}){const{indices:e,alphabet:r,modulus:n,radix:s,double:a}=this,{constructor:o}=Object.getPrototypeOf(this);return new o(Object.assign({indices:e,alphabet:r,modulus:n,radix:s,double:a},t))}}"function"==typeof SuppressedError&&SuppressedError;class i extends o{constructor(t={}){const{alphabet:e,radix:r=2,indices:n=(null==e?void 0:e.slice(0,-1))}=t,s=function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]])}return r}(t,["alphabet","radix","indices"]);super(Object.assign({alphabet:e,indices:n,radix:r},s))}checksum(t){const{modulus:e,radix:r,double:n,indices:s,alphabet:a}=this,o=a.charAt(0).repeat(Number(n)+1),i=this.normalize(t)+o,c=Array.from(i).map((t=>s.indexOf(t))).reduce(((t,n)=>(t*r+n)%e),0),h=(e+1-c%e)%e;return(n?[h/r|0,h%r]:[h]).map((t=>a.charAt(t))).join("")}}class c extends o{checksum(t){const{modulus:e,indices:r,alphabet:n}=this,s=Array.from(this.normalize(t)).map((t=>r.indexOf(t))).reduce(((t,r)=>2*((t%(e+1)+r)%e||e)),e)%(e+1);return n.charAt((e+1-s)%e)}}const h={num:s.from("0123456789"),numX:s.from("0123456789X"),alpha:s.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),alphanum:s.from("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"),alphanumA:s.from("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*")},l=new i({algorithm:"MOD 11-2",designation:1,alphabet:h.numX}),u=new i({algorithm:"MOD 37-2",designation:2,alphabet:h.alphanumA}),p=new i({algorithm:"MOD 97-10",designation:3,modulus:97,radix:10,alphabet:h.num,indices:h.num,double:!0}),d=new i({algorithm:"MOD 661-26",designation:4,modulus:661,radix:26,alphabet:h.alpha,indices:h.alpha,double:!0}),g=new i({algorithm:"MOD 1271-36",designation:5,modulus:1271,radix:36,alphabet:h.alphanumA,double:!0}),m=new c({algorithm:"MOD 11,10",designation:6,alphabet:h.num}),b=new c({algorithm:"MOD 27,26",designation:7,alphabet:h.alpha}),f=new c({algorithm:"MOD 37,36",designation:8,alphabet:h.alphanum});exports.Alphabet=s,exports.HybridISO7064=c,exports.ISO7064=o,exports.Mod11_10=m,exports.Mod11_2=l,exports.Mod1271_36=g,exports.Mod27_26=b,exports.Mod37_2=u,exports.Mod37_36=f,exports.Mod661_26=d,exports.Mod97_10=p,exports.PureISO7064=i;
//# sourceMappingURL=main.min.js.map