brazilian-values icon indicating copy to clipboard operation
brazilian-values copied to clipboard

what about handling CPF if zero at left?

Open sibelius opened this issue 3 years ago • 5 comments

example

1004218907

image

context.true(isCPF('1004218907'));

isCPF says this is an invalid CPF

sibelius avatar Nov 09 '20 15:11 sibelius

failing test here https://github.com/VitorLuizC/brazilian-values/pull/43

sibelius avatar Nov 09 '20 15:11 sibelius

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 avatar Nov 09 '20 15:11 sibelius

@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

mechamobau avatar Nov 09 '20 16:11 mechamobau

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

sibelius avatar Nov 09 '20 16:11 sibelius

another even smaller CPF example

image

5120101

these are all real CPFs

sibelius avatar Nov 09 '20 17:11 sibelius