Skip to content

Commit

Permalink
test funcoes pix
Browse files Browse the repository at this point in the history
eduardokum committed Nov 24, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent f0b6b24 commit 176d392
Showing 2 changed files with 90 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/Util.php
Original file line number Diff line number Diff line change
@@ -1147,16 +1147,18 @@ public static function whichOne($a, ...$parms)
*/
public static function validarCpf($cpf)
{
$c = sprintf('%011s', self::onlyNumbers($cpf));
$c = self::onlyNumbers($cpf);
if (mb_strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) {
return false;
}
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--);
if ($c[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {

return false;
}
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--);
if ($c[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {

return false;
}

@@ -1169,20 +1171,19 @@ public static function validarCpf($cpf)
*/
public static function validarCnpj($cnpj)
{
$c = sprintf('%014s', self::onlyNumbers($cnpj));
$c = self::onlyNumbers($cnpj);
$b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
if ($c < 1) {
return false;
}
if (mb_strlen($c) != 14) {
if (mb_strlen($c) != 14 || preg_match("/^{$c[0]}{14}$/", $c)) {
return false;
}
for ($i = 0, $n = 0; $i < 12; $n += $c[$i] * $b[++$i]);
if ($c[12] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {

return false;
}
for ($i = 0, $n = 0; $i <= 12; $n += $c[$i] * $b[$i++]);
if ($c[13] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {

return false;
}

@@ -1317,22 +1318,27 @@ public static function tipoChavePix($chave)

$parametro = trim($chave);
if (filter_var($parametro, FILTER_VALIDATE_EMAIL)) {

return AbstractBoleto::TIPO_CHAVEPIX_EMAIL;
}

if (Util::validarCnpj($parametro)) {

return AbstractBoleto::TIPO_CHAVEPIX_CNPJ;
}

if (Util::validarCpf($parametro)) {

return AbstractBoleto::TIPO_CHAVEPIX_CPF;
}

// Verificar se é um telefone
if (preg_match('/^(\+\d{2})?\(?\d{2}\)?[-.\s]?(\d\s?)?\d{4}[-.\s]?\d{4}$/', $parametro)) {
if (preg_match('/^(\+\d{2}\s?)?[-.\s]?\(?\d{2}\)?[-.\s]?(\d\s?)?\d{4}[-.\s]?\d{4}$/', $parametro)) {

return AbstractBoleto::TIPO_CHAVEPIX_CELULAR;
}

$parametro = Util::onlyAlphanumber($parametro);
// Verificar se é um UUID
if (preg_match('/^[a-fA-F0-9]{32}$/', $parametro) && (ctype_xdigit($parametro))) {
return AbstractBoleto::TIPO_CHAVEPIX_ALEATORIA;
77 changes: 77 additions & 0 deletions tests/UtilTest.php
Original file line number Diff line number Diff line change
@@ -2,8 +2,11 @@

namespace Eduardokum\LaravelBoleto\Tests;

use Eduardokum\LaravelBoleto\Boleto\AbstractBoleto;
use Eduardokum\LaravelBoleto\Pessoa;
use Exception;
use Eduardokum\LaravelBoleto\Util;
use Illuminate\Support\Arr;

class UtilTest extends TestCase
{
@@ -171,4 +174,78 @@ public function testFuncaoFormatarLinhaDigitavelErro()
$this->expectException(Exception::class);
Util::formatLinhaDigitavel('7569111110010123123000000016001019536000001000010');
}

public function testFuncaoGerarPixCopiaECola()
{
$pixCopiaECola = Util::gerarPixCopiaECola('[email protected]', 100.00, 'id-transacao', new Pessoa(['nome' => 'NOME_DA_PESSOA', 'cidade' => 'CIDADE']));
$this->assertEquals('00020101021226370014br.gov.bcb.pix0115teste@teste.com52040000530398654031005802BR5914NOME_DA_PESSOA6006CIDADE62160512id-transacao6304DA67', $pixCopiaECola);
}

public function testFuncaoDecodePixCopiaECola()
{
$pixDecoded = Util::decodePixCopiaECola('00020101021226370014br.gov.bcb.pix0115teste@teste.com52040000530398654031005802BR5914NOME_DA_PESSOA6006CIDADE62160512id-transacao6304DA67');

$this->assertEquals('[email protected]', Arr::get($pixDecoded, '26.01'));
$this->assertEquals('id-transacao', Arr::get($pixDecoded, '62.05'));
$this->assertEquals(100, Arr::get($pixDecoded, '54'));
$this->assertEquals('NOME_DA_PESSOA', Arr::get($pixDecoded, '59'));
$this->assertEquals('CIDADE', Arr::get($pixDecoded, '60'));
}

public function testFuncaoTipoChavePix()
{
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_EMAIL, Util::tipoChavePix('[email protected]'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_EMAIL, Util::tipoChavePix('[email protected]'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_EMAIL, Util::tipoChavePix('[email protected]'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CNPJ, Util::tipoChavePix('00.000.000/0001-91'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CPF, Util::tipoChavePix('000.000.001-91'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99)9999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99) 9999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99) 9999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99) 9999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99)99999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99) 99999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99) 99999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('(99) 99999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('9999999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('99 99999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('99 99999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('99 99999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('9999999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('9999999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('9999999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('99999999999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+5599999999999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+559999999999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55-99-99999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55.99.99999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 99 99999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 9999999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 99 99999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 9999999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 99 99999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 9999999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55-99-9999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55.99.9999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 99 9999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 999999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 99 9999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 999999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 99 99999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 9999999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 99999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 99999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 99999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 999999999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 9999-9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 9999.9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 9999 9999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_CELULAR, Util::tipoChavePix('+55 (99) 99999999'));
$this->assertEquals(AbstractBoleto::TIPO_CHAVEPIX_ALEATORIA, Util::tipoChavePix('b527c9ac-9cb9-4fe1-a526-2f700fcf8ed7'));

$this->assertNull(Util::tipoChavePix('b527c9ac-9cb9-4fe1-a526-2f700fcf8ed7-1234'));
$this->assertNull(Util::tipoChavePix('00.000.000/0001-00'));
$this->assertNull(Util::tipoChavePix('000.000.001-00'));
$this->assertNull(Util::tipoChavePix('texto-qualquer'));
}
}

0 comments on commit 176d392

Please sign in to comment.