Skip to content

Commit

Permalink
Adicionar suporte a CNPJ Alpha numéricos (#305)
Browse files Browse the repository at this point in the history
* feat: Adicionado suporte para CNPJ alpha numérico

* test: complementado tests com CNPJ Alpha numérico
  • Loading branch information
DaniloAndrade authored Feb 13, 2025
1 parent 89f561d commit 81f41e2
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
*/
public class DigitoPara {

private static final int ZERO_ASCII = 48;
private LinkedList<Integer> numero;
private List<Integer> multiplicadores = new ArrayList<Integer>();
private boolean complementar;
Expand All @@ -56,7 +57,7 @@ public DigitoPara(String trecho) {
this.numero = new LinkedList<Integer>();
char[] digitos = trecho.toCharArray();
for (char digito : digitos) {
this.numero.add(Character.getNumericValue(digito));
this.numero.add(((int) digito) - ZERO_ASCII);
}
Collections.reverse(numero);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
*/
public class CNPJValidator implements Validator<String> {

public static final Pattern FORMATED = Pattern.compile("(\\d{2})[.](\\d{3})[.](\\d{3})/(\\d{4})-(\\d{2})");
public static final Pattern UNFORMATED = Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})");
public static final Pattern FORMATED = Pattern.compile(
"([0-9A-Z]{2})[.]([0-9A-Z]{3})[.]([0-9A-Z]{3})/([0-9A-Z]{4})-([0-9A-Z]{2})");
public static final Pattern UNFORMATED = Pattern.compile(
"([0-9A-Z]{2})([0-9A-Z]{3})([0-9A-Z]{3})([0-9A-Z]{4})([0-9A-Z]{2})");

private boolean isFormatted = false;
private boolean isIgnoringRepeatedDigits;
Expand Down Expand Up @@ -97,8 +99,8 @@ private List<ValidationMessage> getInvalidValues(String cnpj) {
errors.add(messageProducer.getMessage(CNPJError.INVALID_DIGITS));
return errors;
}
if(unformatedCNPJ.length() != 14 || !unformatedCNPJ.matches("[0-9]*")){

if (unformatedCNPJ.length() != 14 || !unformatedCNPJ.matches("[0-9A-Z]*")) {
errors.add(messageProducer.getMessage(CNPJError.INVALID_DIGITS));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ public class CNPJValidatorTest {
private final String validString = "26.637.142/0001-58";
private final String validStringNotFormatted = "26637142000158";

private final String validStringAlpha = "12.ABC.345/01DE-35";
private final String validStringAlphaNotFormatted = "12ABC34501DE35";

private final String firstCheckDigitWrongNotFormatted = "26637142000168";
private final String alphaFirstCheckDigitWrongNotFormatted = "12ABC34501DE45";

@Test
public void shouldHaveDefaultConstructorThatUsesSimpleMessageProducerAndAssumesThatStringIsNotFormatted() {
Expand All @@ -34,6 +38,14 @@ public void shouldHaveDefaultConstructorThatUsesSimpleMessageProducerAndAssumesT
InvalidStateException invalidStateException = (InvalidStateException) e;
assertMessage(invalidStateException, INVALID_CHECK_DIGITS);
}

try {
new CNPJValidator().assertValid(alphaFirstCheckDigitWrongNotFormatted);
fail("Test expected to throw exception");
} catch (InvalidStateException e) {
InvalidStateException invalidStateException = (InvalidStateException) e;
assertMessage(invalidStateException, INVALID_CHECK_DIGITS);
}
}

private void assertMessage(InvalidStateException invalidStateException, String expected) {
Expand Down Expand Up @@ -87,6 +99,7 @@ public void shouldValidateValidCNPJ() {
validator.assertValid("63025530002409");
validator.assertValid("61519128000150");
validator.assertValid("68745386000102");
validator.assertValid("12ABC34501DE35");
}

@Test
Expand Down Expand Up @@ -186,20 +199,29 @@ public void shouldBeEligibleDefaultConstructor() {
final CNPJValidator cnpjValidator = new CNPJValidator();
assertTrue(cnpjValidator.isEligible(validStringNotFormatted));
assertFalse(cnpjValidator.isEligible(validString));

assertTrue(cnpjValidator.isEligible(validStringAlphaNotFormatted));
assertFalse(cnpjValidator.isEligible(validStringAlpha));
}

@Test
public void shouldBeEligibleConstructorNotFormatted() {
final CNPJValidator cnpjValidator = new CNPJValidator(false);
assertTrue(cnpjValidator.isEligible(validStringNotFormatted));
assertFalse(cnpjValidator.isEligible(validString));

assertTrue(cnpjValidator.isEligible(validStringAlphaNotFormatted));
assertFalse(cnpjValidator.isEligible(validStringAlpha));
}

@Test
public void shouldBeEligibleConstructorFormatted() {
final CNPJValidator cnpjValidator = new CNPJValidator(true);
assertFalse(cnpjValidator.isEligible(validStringNotFormatted));
assertTrue(cnpjValidator.isEligible(validString));

assertFalse(cnpjValidator.isEligible(validStringAlphaNotFormatted));
assertTrue(cnpjValidator.isEligible(validStringAlpha));
}

@Test
Expand Down

0 comments on commit 81f41e2

Please sign in to comment.