@hexadrop/value-object
Version:
Hexagonal architecture utils library
2 lines • 1.75 kB
JavaScript
import{a as m}from"./chunk-5T57MRO5.js";import N from"@hexadrop/error/invalid-argument";var c=class extends N{constructor(t,e){super(`${e??"SpanishDocumentNumberValueObject"} can not contains '${t??""}' value`,"InvalidSpanishDocumentNumberValueError","HEX(400)")}},u=c;var p=/[0-9]{8}[A-Z]/,g=/^(?<startLetter>[A-HJ-NP-SU-W])(?<numbers>\d{7})(?<endLetter>[\dA-J])$/,h=/^(?<startLetter>[X-Z])\d{7,8}(?<endLetter>[A-Z])$/,d=class o extends m{constructor(t){let e=o.sanitizeDocumentNumber(t);o.assertIsValid(e),super(e,void 0,"SpanishDocumentNumber")}static isValidDocumentNumber(t){let e=p.test(t),i=g.test(t),n=h.test(t);return e&&this.validateNifLetter(t)||i&&this.validateCifLetter(t)||n&&this.validateNieLetter(t)}static assertIsValid(t){if(!this.isValidDocumentNumber(t))throw new u(t)}static sanitizeDocumentNumber(t){if(t==null||t==="")throw new u(t);return t.toUpperCase().trim().replaceAll("_","").replaceAll("-","").padStart(9,"0")}static validateCifLetter(t){if(!t||t.length!==9)return!1;let e=["J","A","B","C","D","E","F","G","H","I"],i=t.slice(1,-1),n=t.slice(0,1),l=t.slice(Math.max(0,t.length-1)),s=0,a,r;if(!/[A-Z]/.test(n))return!1;for(a=0;a<i.length;++a){if(r=Number(i[a]),Number.isNaN(r))return!1;a%2===0&&(r*=2,r>9&&(r=Math.floor(r/10)+r%10)),s+=r}return s%=10,r=s===0?s:10-s,/[ABEH]/.test(n)?String(r)===l:/[NP-SW]/.test(n)?e[r]===l:String(r)===l||e[r]===l}static validateNieLetter(t){let e=t.charAt(0);switch(e){case"X":{e="0";break}case"Y":{e="1";break}case"Z":{e="2";break}default:return!1}return this.validateNifLetter(e+t.slice(1))}static validateNifLetter(t){return"TRWAGMYFPDXBNJZSQVHLCKE".charAt(Number.parseInt(t,10)%23)===t.charAt(8)}},E=d;export{E as default};
//# sourceMappingURL=spanish-document-number.value-object.js.map