Skip to content

Instantly share code, notes, and snippets.

@miroswd
Last active February 3, 2023 13:50
Show Gist options
  • Save miroswd/a9d30b2f3e23bd96c281caf02e01390e to your computer and use it in GitHub Desktop.
Save miroswd/a9d30b2f3e23bd96c281caf02e01390e to your computer and use it in GitHub Desktop.
Create validator to CNPJ using typescript
const validateCNPJ = (cnpj: string): boolean => {
if (!cnpj) return false;
const onlyNumbersCNPJ = cnpj.replace(/[^\d]+/g, "");
const invalidCNPJs = Array.from("0123456789").map((i) => i.repeat(14));
if (onlyNumbersCNPJ.length !== 14 || invalidCNPJs.includes(onlyNumbersCNPJ)) {
return false;
}
let size = onlyNumbersCNPJ.length - 2;
let numbers = onlyNumbersCNPJ.substring(0, size);
const digits = onlyNumbersCNPJ.substring(size);
let sum = 0;
let pos = size - 7;
for (let i = size; i >= 1; i--) {
sum += numbers.charAt(size - i) * pos--;
if (pos < 2) pos = 9;
}
let result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
if (result !== Number(digits.charAt(0))) return false;
size += 1;
numbers = cnpj.substring(0, size);
sum = 0;
pos = size - 7;
for (let i = size; i >= 1; i--) {
sum += numbers.charAt(size - i) * pos--;
if (pos < 2) pos = 9;
}
result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
return result === Number(digits.charAt(1));
};
export { validateCNPJ };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment