RSS

  • YouTube
  • LinkedIn
  • Google

Algoritimo de validação de CPF brasileiro –; Cadastro de Pessoa Física em PHP

Neste artigo explicarei passo a passo na transformação de um algorítimo de verificação da validade de um CPF para código em PHP.

Se você já conhece o algorítmo e quer ir direto aos códigos disponíveis, Haga clic aquí.

Mas o que é o CPF?

CPF é o acrônimo para Cadastro de Pessoa Física. Ele é um número de documento brasileiro atualmente gerenciado e emitido pela Receita Federal. Todo brasileiro tem o direito (ou o dever) de ter um e somente com ele é possível ter acesso a serviços bancários, matricular-se em cursos de graduação públicos, assumir cargo através de concurso público, ter cartão de crédito, entre outros exemplos.

Composição do CPF

O CPF é composto de onze algarismos, sendo que os ultimos três algarismos possuem significados que explicaremos a seguir.

O nono dígito, lendo da esquerda para a direita, indica a Região Fiscal onde ele foi emitido. Há dez regiões para os algarismo de zero a nove conforme tabela abaixo.

1 – DF, GO, MS, MT e TO
2 – AC, AM, AP, PA, RO e RR
3 – CE, MA e PI
4 – AL, PB, PE, RN
5 – BA e SE
6 – MG
7 – ES e RJ
8 – SP
9 – PR e SC
0 – RS

Os primeiro oito algarismos são o numero base.

Os ultimos dois algarismo são os dígitos verificadores.

Esses dígitos são gerados a partir de cálculos dos nove primeiros algarismos de acordo com a seguintes regras:

Primeiro Dígito verificador

Para o primeiro dígito, pegamos os 8 primeiros algarismos e multiplicamos cada um deles por um número iniciado em 10 e a medida em que vamos avançando para a direita, diminuimos em 1 esse multiplicador e somamos todos os resultados.

Para melhor entendimento, tomemos 123.456.789-XY como exemplo de CPF a ter o digito XY calculado.

1 x 10 = 10
2 x 9 = 18
3 x 8 = 24
4 x 7 = 28
5 x 6 = 30
6 x 5 = 30
7 x 4 = 28
8 x 3 = 24
9 x 2 = 18
Somando 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 temos 210.

Agora, com o total obtido temos duas forma de chegar ao digito verificador.

Método 1

Multiplicamos 210 por 10, dividimos por 11 e pegamos o resto.

Temos então: 210 x 10 = 2.100

2.100 / 11 = 190 com resto 10.

Se o resto for 10 o dígito verificador é zero, de lo contrario, o resto é o dígito verificador.

En nuestro caso, como o resto é igual a 10 o primeiro dígito será 0 (cero).

Método 2

Obtemos o resto da divisão de 210 por 11.

Temos então: 210 / 11 é igual a 19 com resto 1.

Aqui temos uma regra para quando o resto for 0 (cero) o 1 (um). Quando isso acontece o dígito verificador é cero, do contrário subtraimos o resto de 11 para obter o dígito verificador.

Para nuestro caso, como temos resto 1, o nosso primeiro dígito verificador será 0 (cero).

Segundo dígito verificador

Para obter o segundo dígito verificador, acrescentamos o primeiro dígito verificador aos 9 algarismos iniciais e fazemos novamente o mesmo processo feito para o primeiro dígito, com a diferença de que agora iniciamos a partir do segundo dígito.

Nosso CPF já está com o valor 123.456.789-0X e as operações necessárias estão abaixo.
2 x 10 = 20
3 x 9 = 27
4 x 8 = 32
5 x 7 = 35
6 x 6 = 36
7 x 5 = 35
8 x 4 = 32
9 x 3 = 27
0 x 2 = 0
Somando 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 temos 244.

Agora, com o total obtido devemos usar uma das duas formas já explicadas para chegar ao dígito verificador.

Método 1

Multiplicamos 244 por 10, dividimos por 11 e pegamos o resto.

Temos então: 244 x 10 = 2.440

2.440 / 11 = 221 com resto 9.

Se o resto for 10 o dígito verificador é zero, de lo contrario, o resto é o dígito verificador e no nosso caso temos 9 como segundo dígito verificador.

Método 2

Obtemos o resto da divisão de 244 por 11.

Temos então: 244 / 11 é igual a 22 com resto 2.

Lembrando que temos uma regra para quando o resto for 0 (cero) o 1 (um) o dígito verificador é zero.

Caso seja maior que 1 subtraimos esse valor de 11 para obter o dígito verificador.

Para nuestro caso, temos 11 ; 2 = 9 como nosso segundo dígito verificador que é o mesmo valor obtido no método 1.

CPF tem um limite para emissão?

Na teoria, podemos ter até 10^8 ou 100.000.000 (cem milhões) de combinações possíveis para cada região. Na prática temos um pouco menos devido ao não uso de algarismos repetidos, por ejemplo. Embora pareça um número bem grande, ele deverá ser remodelado em algum momento, já que não pode ser reutilizado mesmo quando uma pessoa falece.

Supondo que já existam na região 8 (estadao de São Paulo) cerca de 40 milhões de CPFs emitidos (não consegui dados fidedignos em 2022 por isso estou usando um número aproximado da população residente que é de 44,5 milhões de pessoas), restariam aproximadamente 60 milhões de CPFs disponíveis. Com a atual taxa de crescimento de CPFs (ano de 2022) em cerca de 600 mil por ano, o sistema deve aguentar pouco menos de 100 años.

Chegamos aqui ao final da explicação e do exemplo sobre a composição do CPF. O nosso CPF de exemplo ficou como 123.456.789-09. Abaixo temos alguns exemplos de códigos tanto para gerar os dígitos verificadores, quanto para validá-los.

Codigo de validação de CPF para PHP

abaixo temos alguns códigos:

O primeiro código é de uma função em PHP otimizada para ter o menor numero de complexidade ciclomática que consegui. Ele tem uma ligeira alteração no momento do cálculo do segundo digitido verificador. Ao invés de começar pelo segundo algarismo, o codigo começa pelo primeiro e usa o valor 11 como multiplicador. Outra alteração visivel é que para evitar a necessidade de comparação para saber se estamos no nono e decimo digitos, atribuo o valor zero ao ultimo elemento (indice 10) para reduzir mais uma comparação.

O algoritmo utilizado é o método 1 explicado acima e há um pequeno truque para evitar a comparação com o resto igual a 10 que é fazer o módulo de 10 do resto.

// Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

   /**
     * 
     * Verifica se um CPF é válido
     * @ author Marcos Regis <marcos@marcosregis.com>
     * @param string $cpf
     * @return bool
     */
    function validar(string $cpf): bool
    {
        if (strlen($cpf) != 11) {
            return false;
        }
        $elementos = (array)str_split($cpf);
        $elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
        $somaA = 0;
        $somaB = 0;
        foreach ($elementos as $indice => $elemento) {
            $multiplicador = count($elementos) - $indice;
            $somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
            $somaB += (int)$elemento * (int)$multiplicador;
        }

        $moduloA = (($somaA * 10) % 11) % 10;
        $moduloB = (($somaB * 10) % 11) % 10;

        return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
    }

Configurando um servidor de correo electrónico

Tenho meu próprio servidor de e-mail utilizando ;Postfix, Palomar, MariaDB, Spamassassin, ClamAV, Amavisd-new, Fail2ban, Nginx, Postfixadmin y Roundcube ;bajo CentOS 8.
Aunque tiene varias recetas para cómo configurar este paquete, Me tomó muchas horas para encontrar la manera de mantener el servicio funcionando correctamente, cada configuración en el Main.cf y en el Master.cf y al final lograr reducir la avalancha de spam que llega cada instante.
Y anti-spam es el foco de esta publicación. Han sufrido y siguen sufriendo con los constantes intentos para utilizar mis servicios como un zombi o vertimiento del virus, fraude y todo lo demás que se puede.

He perdido la cuenta de cuantas veces mi servicio DNS detenido por exceso de conexión intenta entupiam la memoria y había forzado el s.. a cortar processos para economizar recursos e o ;el nombre ;fue elegido para ser el eslabón más débil.
Por lo tanto, Este artículo tiene el foco en la configuración adecuada para los servicios de correo privado, unos pocos usuarios y pocos dominios. Sin duda mucho de lo que es en este pequeño manual sirve para servicios de clase mundial, pero creo que para estos casos el uso de herramientas o servicios dedicados y especializados siempre se debe tomar en consideración.

Então deixemos de lado o falatório para irmos direto ao ;práctica.

Instalación de paquetes

El primer paso es instalar todos los paquetes que se utilizarán. Roundcube y Postfixadmin se ejecutan bajo un servidor web compatible con PHP cuyas cuentas de correo electrónico se pueden almacenar en un servidor de base de datos. Cómo uso Nginx Webserver y aunque prefiero PostgreSQL utilizará el MariaDB como DBMS debido al hecho de que la mayoría de los usos (por WordPress probablemente).

Por lo tanto, al final del proceso de instalación, deberíamos haber instalado algunos nuevos repositorios de paquetes.

Activar los repositorios Extra a sus paquetes de la distribución, Si no lo has hecho ya. Para CentOS 8 el siguiente comando hará que.

$ sudo dnf install epel-release

Además, instalar los paquetes Enrollamiento, htop, Llegué, yum-utils, wget, Herramientas de red, chrony y certbot que será necesario en otros puntos de la configuración.

$ sudo dnf install -y curl htop vim yum-utils wget net-tools chrony certbot

Postfix

Postfix ;es un MTA (agente de transferencia de correo). Un MTA puentes el boquete entre los ordenadores para el intercambio de mensajes de correo electrónico. Para nuestro caso, es el elemento principal.

La versión de Postfix que usaré en este documento es el 3.3. Para saber qué versión se instalará tipo:

$ sudo dnf info postfix

Para instalar ejecutar el comando

$ sudo dnf install -y postfix postfix-mysql postfix-pcre

Vamos a dejar el servicio parado por ahora pero ya preparado para abrir junto con el sistema operativo.

$ sudo systemctl enable postfix

Palomar

Palomar ;es un servidor de correo Imap y Pop3. Con ella podemos enviar y recibir mensajes a través de Postfix y entre otras cosas, controlar el acceso al servicio a través de autenticación.
Para instalar Dovecot con soporte mysql sólo tiene que ejecutar el comando:

$ sudo dnf install -y dovecot dovecot-mysql

Otra vez, Activemos el servicio pero dejemos que se detenga.

$ sudo systemctl enable dovecot

Amavis

Amavis ;es un filtro de contenido para el correo electrónico. Con él se puede filtrar mensajes dañinos utilizando la configuración de spam, Virus y otros programas maliciosos. Debajo de los comandos que lo instalan. Requiere muchas dependencias que se actualizarán y/o instalarán juntas. Uma dessas dependencias é o ;SpamAssassin ;Eso se establecerá más adelante, Junto con todos los otros paquetes que estamos instalando.

En primer lugar, asegúrese de que el repositorio de PowerTools está habilitado, porque es a partir de ella que vamos a instalar amavisd-new.

$ sudo dnf config-manager --set-enabled powertools

Em seguida instalamos o Amavis e algumas dependencias sendo uma delas o ;Clamav ;Que es un antivirus simple y bastante eficiente para los tipos más comunes de amenazas y totalmente gratis.

$ sudo dnf -y install amavisd-new clamd perl-Digest-SHA1 perl-IO-stringy

Otra vez, Activaremos los servicios para que siempre se inicien automáticamente, Pero por ahora dejándolos de pie.

$ sudo systemctl enable amavisd spamassassin

MariaDB (o MySQL)

Generalmente, quem usa WordPress já possui instalado e configurado o ;MariaDB ;o MySQL. Si ese es el caso, puede omitir este paso.

Prefiero especialmente PostgreSQL, Pero como la intención de este documento es permitir que DevOps pueda tener sus propios servicios y no siempre puedo tener varias instancias decidí usar el MariaDB. De esta manera, Si necesitas añadir WordPress más tarde, No es necesario añadir un DBMS adicional o incluso utilizar contenedores para que tenga soporte PostgreSQL.

No te preocupes por la configuración en este punto, porque los detallaré más adelante en otra publicación. Continuando con la instalación debemos ejecutar el comando:

$ sudo dnf install -y mariadb-server

y luego activar el servicio para comenzar junto con el sistema

$ sudo systemctl enable mariadb

Webserver (Nginx + Php-Fpm)

Los últimos elementos que se instalarán forman parte del Webserver. Es posible que ya tenga una corriendo como Apache para que este punto se pueda omitir. Si está iniciando un nuevo servidor o si no tiene intimidad con la configuración apache y PHP, Recomiendo seguir los consejos de esta instalación.

Eu gosto muito do ;Nginx ;e vou usar em conjunto com o ;Php-Fpm.

$ sudo dnf install -y nginx php-fpm

En este punto ya tenemos todos los archivos necesarios para inciso la configuración del servidor de correo.

Soy demasiado perezoso.

No le gusta seguir escribiendo o no están preocupados en los detalles de cada elemento instalado. Tus problemas han terminado.!

Usted puede ejecutar todos los comandos en este documento con las líneas abajo:

ATENCIÓN! Este script es sólo un archivo con las líneas de comando. Eventualmente puede no funcionar correctamente dependiendo de la configuración del sistema.

$ sudo dnf update
$ sudo dnf install -y epel-release
$ sudo dnf config-manager --set-enabled powertools
$ sudo dnf -y install --enable-repo=epel-release,powertools curl htop vim yum-utils wget net-tools chrony certbot postfix dovecot amavisd-new clamd perl-Digest-SHA1 perl-IO-stringy mariadb-server ngixn php-fpm
$ sudo systemctl enable postfix mariadb spamassassin amavisd dovecot nginx php-fpm 

Con todo instalado podemos iniciar la configuración. Comecemos pelo ;MariaDB.

Antispam para servidores de correo electrónico

Ya publiqué hace un tiempo un artículo que muestra cómo configuré un servidor y un correo electrónico usando las herramientas más comunes para el entorno OpenSource en Linux. Utilizado Postfix, Palomar, Método Postfixadmin, Roundcube y Spamassassin.

Ahora voy a mostrar otra herramienta que es una alternativa a Spamassassin que es el MailCleaner, Año Nuevo.



Continuar leyendo >>

Protegendo seu WordPress de ataques

Este sitio al que está accediendo es una instalación de la Wordpress. Me gusta la facilidad de la misma.

WordPress es muy bueno en la producción de un blog rápidamente en un VPS o Cloud, pero su facilidad es también su mayor defecto.

Qué sencillo es tener un sitio web con él, All dies sind Dinge, die ich gesehen habe, und ich glaube, sogar Sie haben gesehen.



Continuar leyendo >>

Docker en Ubuntu. Service nginx no pudo construir: Error de ADD: stat /var/lib/docker/tmp/docker-builder(;)/startup.sh: ningún archivo o directorio de este tipo

Docker en Ubuntu

A veces, al usar Laradock, este error se produce después de intentar una reconstrucción de contenedor con no such file or directory mensaje en docker-compose up -d –build nginx Comando.

No está claro para mí cuál es el problema real, pero ejecutar el comando con sudo, podemos ejecutarlo con éxito.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

Después de construir contenedores con sudo, es posible descargarlo y recargar sin sudo.

Servidor de Email –; Parte 4 ; Postfix 3

Parte 1 ; Configurar el archivo main.cf

Esta es la cuarta parte del proceso de creación del servidor de correo en un CentOS 8 y la primera parte de la configuración de Postfix. Si llegaste aquí por accidente, mejor Lea una de las siguientes publicaciones primero:

Parte 1 ; Instalación de paquetes

Parte 2 ; Configuración de MariaDB

Parte 3 ; Configuración de dovecot

Postfix es la parte más importante de nuestro servidor de correo. Él se encargará de hablar con otros MTA para recibir y enviar mensajes de correo electrónico y por lo que se llega es necesario que sea identificable por el nombre del servidor o su nombre de host.



Continuar leyendo >>

Servidor de Email –; Parte 3 ; Palomar

Esta es la tercera parte del proceso de crear el servidor de correo en un CentOS 8. Si llegaste aquí por accidente, Primero debe leer las publicaciones anteriores

Parte 1 ; Instalación de paquetes

Parte 2 ; Configuración de MariaDB

Dovecot es un MDA (Agente de entrega de correo) es un agente que lleva mensajes de Postfix a cuadros de mensaje virtual. En esta sección configuramos la instalación de Dovecot para forzar a los usuarios utilizar SSL cuando se conecten, de esta manera nunca enviar contraseñas en texto modo.

Siempre me gusta mantener los archivos originales de una definición de si termino perderse durante la configuración. Puedo decir que este paso no es necesario si haces este tutorial completamente, Sin embargo, Si ya tiene una configuración anterior y sólo está utilizando para mejorar le sugiero fuertemente que haga copias de los archivos.

En nuestro caso, los archivos de configuración será en /etc/dovecot/CONF.d/. Entonces podemos hacer la copia con el comando:



Continuar leyendo >>

Servidor de Email –; Parte 2 ; MariaDB

Esta es la segunda parte del proceso de crear el servidor de correo en un CentOS 8. Si llegaste aquí por accidente, Usted debe leer primero la publicación anterior en el Instalación de paquetes

Por qué usar MySQL/MariaDB?

En primer lugar debo aclarar que yo prefiero usar PostgreSQL en vez de MySQL/MariaDB por muchas razones, Sin embargo, Hay uno que pesa contra el uso de PostgreSQL en un servidor unificado con WordPress y servicios de correo electrónico es el simple hecho de que WP no tiene soporte nativo de PostgreSQL. Puede tener más información sobre este tema en la documentación oficial de WordPress Este enlace. Cómo estoy basando en la experiencia personal para redactar este documento y también para pequeños servicios, Estoy usando el más común y más accesible. Si el uso de PostgreSQL es de su interés, Usted puede consultar este documento más adelante donde le mostraré cómo migrar de MariaDB para PostgreSQL.

Configurar MySQL/MariaDB

Asumiendo que usted está siguiendo los pasos de este manual, Estarás con una instalación de MariaDB aún no configurado. Si ya tienes una instalación funcional, Usted puede saltar a la siguiente paso.



Continuar leyendo >>

DataTables + HTML 5 Exportación de botones + Laravel-Mix (WebPack)

En los últimos días, He experimentado un problema tratando de usar DataTables y Manos a la obra 4 con soporte para exportar los resultados Excel y PDF utilizando Laravel-Mix. Después de horas y horas tratando de poner todos los scripts para trabajar juntos, Por fin gano. Por lo tanto, Me decido a escribir este Cómo para aquellos con el mismo tipo de problemas.



Continuar leyendo >>

Enlaces de J5

Aquí hay algunos enlaces útiles para celular Samsung J5.

Verificación de la cuenta de Google Bypass