Skip to content

Commit 81f41e2

Browse files
Adicionar suporte a CNPJ Alpha numéricos (#305)
* feat: Adicionado suporte para CNPJ alpha numérico * test: complementado tests com CNPJ Alpha numérico
1 parent 89f561d commit 81f41e2

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

stella-core/src/main/java/br/com/caelum/stella/DigitoPara.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
*/
3636
public class DigitoPara {
3737

38+
private static final int ZERO_ASCII = 48;
3839
private LinkedList<Integer> numero;
3940
private List<Integer> multiplicadores = new ArrayList<Integer>();
4041
private boolean complementar;
@@ -56,7 +57,7 @@ public DigitoPara(String trecho) {
5657
this.numero = new LinkedList<Integer>();
5758
char[] digitos = trecho.toCharArray();
5859
for (char digito : digitos) {
59-
this.numero.add(Character.getNumericValue(digito));
60+
this.numero.add(((int) digito) - ZERO_ASCII);
6061
}
6162
Collections.reverse(numero);
6263
}

stella-core/src/main/java/br/com/caelum/stella/validation/CNPJValidator.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
*/
2020
public class CNPJValidator implements Validator<String> {
2121

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

2527
private boolean isFormatted = false;
2628
private boolean isIgnoringRepeatedDigits;
@@ -97,8 +99,8 @@ private List<ValidationMessage> getInvalidValues(String cnpj) {
9799
errors.add(messageProducer.getMessage(CNPJError.INVALID_DIGITS));
98100
return errors;
99101
}
100-
101-
if(unformatedCNPJ.length() != 14 || !unformatedCNPJ.matches("[0-9]*")){
102+
103+
if (unformatedCNPJ.length() != 14 || !unformatedCNPJ.matches("[0-9A-Z]*")) {
102104
errors.add(messageProducer.getMessage(CNPJError.INVALID_DIGITS));
103105
}
104106

stella-core/src/test/java/br/com/caelum/stella/validation/CNPJValidatorTest.java

+22
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ public class CNPJValidatorTest {
2121
private final String validString = "26.637.142/0001-58";
2222
private final String validStringNotFormatted = "26637142000158";
2323

24+
private final String validStringAlpha = "12.ABC.345/01DE-35";
25+
private final String validStringAlphaNotFormatted = "12ABC34501DE35";
26+
2427
private final String firstCheckDigitWrongNotFormatted = "26637142000168";
28+
private final String alphaFirstCheckDigitWrongNotFormatted = "12ABC34501DE45";
2529

2630
@Test
2731
public void shouldHaveDefaultConstructorThatUsesSimpleMessageProducerAndAssumesThatStringIsNotFormatted() {
@@ -34,6 +38,14 @@ public void shouldHaveDefaultConstructorThatUsesSimpleMessageProducerAndAssumesT
3438
InvalidStateException invalidStateException = (InvalidStateException) e;
3539
assertMessage(invalidStateException, INVALID_CHECK_DIGITS);
3640
}
41+
42+
try {
43+
new CNPJValidator().assertValid(alphaFirstCheckDigitWrongNotFormatted);
44+
fail("Test expected to throw exception");
45+
} catch (InvalidStateException e) {
46+
InvalidStateException invalidStateException = (InvalidStateException) e;
47+
assertMessage(invalidStateException, INVALID_CHECK_DIGITS);
48+
}
3749
}
3850

3951
private void assertMessage(InvalidStateException invalidStateException, String expected) {
@@ -87,6 +99,7 @@ public void shouldValidateValidCNPJ() {
8799
validator.assertValid("63025530002409");
88100
validator.assertValid("61519128000150");
89101
validator.assertValid("68745386000102");
102+
validator.assertValid("12ABC34501DE35");
90103
}
91104

92105
@Test
@@ -186,20 +199,29 @@ public void shouldBeEligibleDefaultConstructor() {
186199
final CNPJValidator cnpjValidator = new CNPJValidator();
187200
assertTrue(cnpjValidator.isEligible(validStringNotFormatted));
188201
assertFalse(cnpjValidator.isEligible(validString));
202+
203+
assertTrue(cnpjValidator.isEligible(validStringAlphaNotFormatted));
204+
assertFalse(cnpjValidator.isEligible(validStringAlpha));
189205
}
190206

191207
@Test
192208
public void shouldBeEligibleConstructorNotFormatted() {
193209
final CNPJValidator cnpjValidator = new CNPJValidator(false);
194210
assertTrue(cnpjValidator.isEligible(validStringNotFormatted));
195211
assertFalse(cnpjValidator.isEligible(validString));
212+
213+
assertTrue(cnpjValidator.isEligible(validStringAlphaNotFormatted));
214+
assertFalse(cnpjValidator.isEligible(validStringAlpha));
196215
}
197216

198217
@Test
199218
public void shouldBeEligibleConstructorFormatted() {
200219
final CNPJValidator cnpjValidator = new CNPJValidator(true);
201220
assertFalse(cnpjValidator.isEligible(validStringNotFormatted));
202221
assertTrue(cnpjValidator.isEligible(validString));
222+
223+
assertFalse(cnpjValidator.isEligible(validStringAlphaNotFormatted));
224+
assertTrue(cnpjValidator.isEligible(validStringAlpha));
203225
}
204226

205227
@Test

0 commit comments

Comments
 (0)