Open sibelius opened 4 years ago
failing test here https://github.com/VitorLuizC/brazilian-values/pull/43
my current workaround
import { isCPF } from 'brazilian-values';
/**
* Pattern to match formatted CPF (999.999.999-99) or 11 numbers.
*/
export const CPF_PATTERN = /^(\d{11}|\d{3}\.\d{3}\.\d{3}\-\d{2})$/;
const NonNumeric = /\D/g;
const mapToNumeric = (
value: string,
): string => value.replace(NonNumeric, '');
const padding = '00000000000';
const leftPad = (str: string) => {
return padding.substring(0, padding.length - str.length) + str;
}
export const isSafeCPF = (value: string): boolean => {
if (!CPF_PATTERN.test(value)) {
const onlyNumeric = mapToNumeric(value);
const leftPadCpf = leftPad(onlyNumeric);
return isCPF(leftPadCpf);
}
return isCPF(value);
}
@sibelius maybe this can be an issue with 4devs validator (or I'm wrong) because the verifier digit returned by validation it's 71
and not 7
CPF can have less than 11 digits, so the current logic is wrong
Old CPF have less than 11 digits, my father CPF for instance
You need to left pad
another even smaller CPF example
5120101
these are all real CPFs
example
1004218907
context.true(isCPF('1004218907'));
isCPF
says this is an invalid CPF