Skip to content

Commit

Permalink
Ajustes Metodo de extracao CNPJ e CPF
Browse files Browse the repository at this point in the history
  • Loading branch information
Samuel-Oliveira committed Mar 4, 2024
1 parent 2dfa5b9 commit 92ead68
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,9 @@ public static void inicializaCertificado(Certificado certificado, InputStream ca
Protocol.registerProtocol("https", protocol);

log.info(String.format("JAVA-CERTIFICADO | Samuel Oliveira | [email protected] " +
"| VERSAO=%s | CNPJ/CPF=%s | VENCIMENTO=%s | ALIAS=%s | TIPO=%s | CAMINHO=%s | CACERT=%s | SSL=%s",
"3.1",
"| VERSAO=%s | DATA_VERSAO=%s | CNPJ/CPF=%s | VENCIMENTO=%s | ALIAS=%s | TIPO=%s | CAMINHO=%s | CACERT=%s | SSL=%s",
"3.2",
"04/03/2024",
certificado.getCnpjCpf(),
certificado.getDataHoraVencimento(),
certificado.getNome().toUpperCase(),
Expand Down Expand Up @@ -90,7 +91,7 @@ private static void setDadosCertificado(Certificado certificado, KeyStore keySto
}

X509Certificate certificate = getCertificate(certificado, keyStore);
certificado.setCnpjCpf(getDocumentoFromCertificado(certificate));
certificado.setCnpjCpf(getDocumentoFromCertificado(certificate.getSubjectX500Principal().getName()));
Date dataValidade = dataValidade(certificate);
certificado.setVencimento(dataValidade.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
certificado.setDataHoraVencimento(dataValidade.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
Expand Down Expand Up @@ -259,20 +260,27 @@ public static Certificado getCertificadoByCnpjCpf(String cnpjCpf) throws Certifi
cnpjCpf));
}

public static String getDocumentoFromCertificado(X509Certificate cert) {
public static String getDocumentoFromCertificado(String texto) {

String texto = cert.getSubjectX500Principal().getName();
// Primeiro, tenta encontrar CNPJs
Pattern patternCNPJ = Pattern.compile("(?<!\\d)\\d{14}(?!\\d)");
Matcher matcherCNPJ = patternCNPJ.matcher(texto);

// Padrão ajustado para buscar CPF (11 dígitos) ou CNPJ (14 dígitos)
Pattern pattern = Pattern.compile("(?<!\\d)(\\d{14}|\\d{11})(?!\\d)");
Matcher matcher = pattern.matcher(texto);
if (matcherCNPJ.find()) {
// Se encontrar um CNPJ, retorna ele
return matcherCNPJ.group();
} else {
// Se não encontrar CNPJs, tenta encontrar CPFs
Pattern patternCPF = Pattern.compile("(?<!\\d)\\d{11}(?!\\d)");
Matcher matcherCPF = patternCPF.matcher(texto);

while (matcher.find()) {
String documento = matcher.group();
if (documento.length() == 14 || documento.length() == 11) {
return documento;
if (matcherCPF.find()) {
// Se encontrar um CPF, retorna ele
return matcherCPF.group();
}
}

// Se não encontrar nenhum documento, retorna string vazia
return "";
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.io.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Paths;
Expand Down Expand Up @@ -65,12 +67,12 @@ void certificadoPfxArquivoInvalido() {
void certificadoPfxCPF() throws CertificadoException, FileNotFoundException {
Certificado certificado = CertificadoService.certificadoPfx(CERTIFICADO_CPF, SENHA);
assertEquals("certificado cpf teste", certificado.getNome());
assertEquals(SENHA,certificado.getSenha());
assertEquals(CPF,certificado.getCnpjCpf());
assertEquals( LocalDate.of(2029, 5, 16),certificado.getVencimento());
assertEquals(SENHA, certificado.getSenha());
assertEquals(CPF, certificado.getCnpjCpf());
assertEquals(LocalDate.of(2029, 5, 16), certificado.getVencimento());
assertTrue(certificado.isValido());
assertEquals(Long.valueOf(LocalDate.now().until(LocalDate.of(2029, 5, 16), ChronoUnit.DAYS)),certificado.getDiasRestantes());
assertEquals("TLSv1.2",certificado.getSslProtocol());
assertEquals(Long.valueOf(LocalDate.now().until(LocalDate.of(2029, 5, 16), ChronoUnit.DAYS)), certificado.getDiasRestantes());
assertEquals("TLSv1.2", certificado.getSslProtocol());
assertEquals(TipoCertificadoEnum.ARQUIVO, certificado.getTipoCertificado());
assertEquals(new BigInteger("219902325555"), certificado.getNumeroSerie());
}
Expand All @@ -79,14 +81,14 @@ void certificadoPfxCPF() throws CertificadoException, FileNotFoundException {
void certificadoPfxCNPJ() throws CertificadoException, FileNotFoundException {
Certificado certificado = CertificadoService.certificadoPfx(CERTIFICADO_CNPJ, SENHA);
assertEquals("certificado cnpj teste", certificado.getNome());
assertEquals(SENHA,certificado.getSenha());
assertEquals(CNPJ,certificado.getCnpjCpf());
assertEquals( LocalDate.of(2029, 5, 16),certificado.getVencimento());
assertEquals(SENHA, certificado.getSenha());
assertEquals(CNPJ, certificado.getCnpjCpf());
assertEquals(LocalDate.of(2029, 5, 16), certificado.getVencimento());
assertTrue(certificado.isValido());
assertEquals(Long.valueOf(LocalDate.now().until(LocalDate.of(2029, 5, 16), ChronoUnit.DAYS)),certificado.getDiasRestantes());
assertEquals(Long.valueOf(LocalDate.now().until(LocalDate.of(2029, 5, 16), ChronoUnit.DAYS)), certificado.getDiasRestantes());
assertEquals("TLSv1.2", certificado.getSslProtocol());
assertEquals(TipoCertificadoEnum.ARQUIVO, certificado.getTipoCertificado());
assertEquals(new BigInteger("219902325555"),certificado.getNumeroSerie());
assertEquals(new BigInteger("219902325555"), certificado.getNumeroSerie());
}

@Test
Expand Down Expand Up @@ -121,16 +123,16 @@ void certificadoPfxBytes() throws CertificadoException, IOException {
byte[] bytes = Files.readAllBytes(Paths.get(CERTIFICADO_CNPJ));
Certificado certificado = CertificadoService.certificadoPfxBytes(bytes, SENHA);
assertEquals("certificado cnpj teste", certificado.getNome());
assertEquals(SENHA,certificado.getSenha());
assertEquals(CNPJ,certificado.getCnpjCpf());
assertEquals(LocalDate.of(2029, 5, 16),certificado.getVencimento());
assertEquals(SENHA, certificado.getSenha());
assertEquals(CNPJ, certificado.getCnpjCpf());
assertEquals(LocalDate.of(2029, 5, 16), certificado.getVencimento());
assertEquals(true, certificado.isValido());
assertEquals(Long.valueOf(LocalDate.now().until(LocalDate.of(2029, 5, 16), ChronoUnit.DAYS)),certificado.getDiasRestantes());
assertEquals(Long.valueOf(LocalDate.now().until(LocalDate.of(2029, 5, 16), ChronoUnit.DAYS)), certificado.getDiasRestantes());
assertEquals("TLSv1.2", certificado.getSslProtocol());
certificado.setSslProtocol("TLSv1.3");
assertEquals("TLSv1.3", certificado.getSslProtocol());
assertEquals(TipoCertificadoEnum.ARQUIVO_BYTES, certificado.getTipoCertificado());
assertEquals(new BigInteger("219902325555"),certificado.getNumeroSerie());
assertEquals(new BigInteger("219902325555"), certificado.getNumeroSerie());
}

@Test
Expand All @@ -142,7 +144,7 @@ void getCertificadoByCnpjCpf() throws CertificadoException, FileNotFoundExceptio
new MockUp<CertificadoService>() {
@Mock
public Certificado getCertificadoByCnpjCpf(String cpfCnpj) {
return Stream.of(certCPF, certCNPJ).filter(cert -> Optional.ofNullable(cert.getCnpjCpf()).orElse("")
return Stream.of(certCPF, certCNPJ).filter(cert -> Optional.ofNullable(cert.getCnpjCpf()).orElse("")
.startsWith(cpfCnpj)).findFirst().orElse(null);
}
};
Expand All @@ -162,7 +164,7 @@ public Certificado getCertificadoByCnpjCpf(String cpfCnpj) {

@Test
void inicaConfiguracoesCorretamente() {
Assertions.assertDoesNotThrow( () -> {
Assertions.assertDoesNotThrow(() -> {
Certificado certificado = CertificadoService.certificadoPfx(CERTIFICADO_CNPJ, SENHA);
CertificadoService.inicializaCertificado(certificado);
});
Expand All @@ -176,12 +178,30 @@ void inicaConfiguracoesParametrosNull() throws IOException, CertificadoException

//Certificado Null
Assertions.assertThrows(IllegalArgumentException.class, () ->
CertificadoService.inicializaCertificado(null)
CertificadoService.inicializaCertificado(null)
);
//Cacert Null
Assertions.assertThrows(IllegalArgumentException.class, () ->
CertificadoService.inicializaCertificado(null)
CertificadoService.inicializaCertificado(null)
);
}

@Test
void extraiCpfCnpjCorretamente() {
String textoCnpj = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CNPJ=07364617000135";
assertEquals("07364617000135", CertificadoService.getDocumentoFromCertificado(textoCnpj));

String textoCpf = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CPF=99999999999";
assertEquals("99999999999", CertificadoService.getDocumentoFromCertificado(textoCpf));

String textoCnpjeCPF = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CNPJ=07364617000135, CPF=99999999999";
assertEquals("07364617000135", CertificadoService.getDocumentoFromCertificado(textoCnpjeCPF));

String textoCpfECNPJ = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CPF=99999999999, CNPJ=07364617000135";
assertEquals("07364617000135", CertificadoService.getDocumentoFromCertificado(textoCpfECNPJ));

String textoSemNenhumDocumento = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB";
assertEquals("", CertificadoService.getDocumentoFromCertificado(textoSemNenhumDocumento));
}

}

0 comments on commit 92ead68

Please sign in to comment.