RSS

  • YouTube
  • LinkedIn
  • 谷歌

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, 请单击此处.

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, 否则, o resto é o dígito verificador.

在我们的案例, como o resto é igual a 10 o primeiro dígito será 0 (零).

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 (零) 或 1 (um). Quando isso acontece o dígito verificador é , do contrário subtraimos o resto de 11 para obter o dígito verificador.

就我们的情况而言, como temos resto 1, o nosso primeiro dígito verificador será 0 (零).

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, 否则, 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 (零) 或 1 (um) o dígito verificador é zero.

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

就我们的情况而言, 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, 举个例子. 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 年.

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;
    }

设置电子邮件服务器

Tenho meu próprio servidor de e-mail utilizando ;后缀, 多韦科特, MariaDB, 垃圾邮件刺客, ClamAV, Amavisd 新, Fail2ban, Nginx, 后缀管理员和圆立方体 ;抽泣 8.
虽然它有几个食谱如何配置此程序包, 我花了大量的时间来找出如何保持正确运行的服务, 每个配置中的 main.cf 并在 master.cf 并最终设法减少垃圾邮件的洪流,到达每一个瞬间.
反垃圾邮件是这份出版物的焦点. 我遭受了,还患上的不断的尝试使用我的服务作为一个僵尸或脱落的病毒, 欺诈和一切你可以.

我记不清多少次我路过过多的连接的 DNS 服务试图通过对 entupiam 的内存和强迫 s。. a cortar processos para economizar recursos e o ;名为 ;被选为最薄弱的环节.
所以, 这篇文章在私人邮件服务的适当配置中具有焦点, 几个用户和几个域. 当然很多什么是在这短的手册为世界一流的服务, 但我相信,在这些情况下使用的工具或专用和专门的服务应总是被考虑.

Então deixemos de lado o falatório para irmos direto ao ;手牵手.

安装包

第一步是安装所有将要使用的包. 圆立方管和后缀管理员运行在 PHP 支持的 Web 服务器下,其电子邮件帐户可以存储在数据库服务器上. 作为一个网络服务器,我使用Nginx,虽然我更喜欢PostgreSQL,我会使用MariaDB作为DBMS,因为事实上,大多数已经使用它 (由于文字新闻可能).

所以, 在安装过程结束时, 我们应该安装一些新的包存储库.

启用用于分发的额外包存储库, 如果你还没有这样做. 对于中心 8 下面的命令将做到这一点.

$ sudo dnf install epel-release

此外, 安装包 卷曲, 赫托普, 来, 百胜利用, Wget, 网络工具, 计时和证书机器人 这将需要在配置的其他点.

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

后缀

Postfix ;是一个MTA (邮件转账代理). MTA 弥合计算机之间交换电子邮件的差距. 就我们的情况而言, 是主要元素.

我将在此文档中使用的Postfix版本是 3.3. 要了解将安装哪个版本的类型:

$ sudo dnf info postfix

要安装运行命令

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

我们将保留服务,但已配置为与操作系统一起启动.

$ sudo systemctl enable postfix

多韦科特

多韦科特 ;是一个伊马普和Pop3邮件服务器. 有了它,我们将能够通过Postfix发送和接收消息,除其他外,通过身份验证控制对服务的访问.
要安装鸽子与mysql支持只是运行命令:

$ sudo dnf install -y dovecot dovecot-mysql

再来一次, 我们将激活服务,但让它停止.

$ sudo systemctl enable dovecot

阿马维斯

阿马维斯 ;是电子邮件的内容过滤器. 有了它,您可以使用垃圾邮件设置过滤有害消息, 病毒和其他恶意软件. 下面是安装它的命令. 它需要许多将更新和/或一起安装的依赖项. Uma dessas dependencias é o ;斯帕帕萨辛 ;稍后将设置, 以及我们正在安装的所有其他包.

首先确保电源设备存储库已启用, 因为它是从它,我们将安装阿玛维斯-新.

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

Em seguida instalamos o Amavis e algumas dependencias sendo uma delas o ;克拉马瓦 ;这是一个简单和相当有效的防病毒最常见的类型的威胁,完全免费.

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

再次, 我们将激活这些服务,以便它们始终自动启动, 但现在离开他们仍然.

$ sudo systemctl enable amavisd spamassassin

MariaDB (或我的)

通常, quem usa WordPress já possui instalado e configurado o ;MariaDB ;或我的. 如果是这样的话, 可以跳过此步骤.

我特别喜欢波斯特格雷斯QL, 但由于本文档的意图是允许DevOps拥有自己的服务,并且不能总是有几个实例,我决定使用MariaDB. 这样,, 如果您需要稍后添加WordPress, 您不需要添加额外的DBMS,甚至使用包装来支持PostgreSQL.

不要担心此时的设置, 因为我稍后会在另一份出版物中详细说明. 继续安装,我们应该运行命令:

$ sudo dnf install -y mariadb-server

然后激活服务,与系统一起启动

$ sudo systemctl enable mariadb

网络服务器 (Nginx + 菲普 - 弗姆)

最后要安装的元素是 Web 服务器的一部分. 有可能你已经有一个运行像阿帕奇,所以这一点可以跳过. 如果您正在启动一台新服务器,或者您与apache和PHP配置没有亲密关系, 建议关注此安装的提示.

Eu gosto muito do ;Nginx ;e vou usar em conjunto com o ;菲普 - 弗姆.

$ sudo dnf install -y nginx php-fpm

在这一点上,我们已经有了所有的文件需要开始配置的邮件服务器.

我太懒了

不喜欢打字或不担心安装每个项目的详细信息. 你的问题已经结束了!

您可以用下面的行运行本文档中的所有命令:

注意! 此脚本只是一个带有命令行的文件. 最终,它可能不会正常工作,这取决于您的系统设置.

$ 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 

安装所有内容后,我们可以启动设置. Comecemos pelo ;MariaDB.

电子邮件服务器的反垃圾邮件

前段时间,我已经发表了一篇文章,展示了我如何使用 Linux 上最常见的开源环境工具设置服务器和电子邮件. 使用 后缀, 多韦科特, 后修复管理, 新, 圆立方, 新年垃圾邮件刺客.

现在,我将显示另一个工具,这是垃圾邮件的替代品,这是 邮件清洁器, 新年.



继续阅读 > >

保护您的 WordPress 免受攻击

您访问的此站点是 WordPress. 我喜欢它的轻松.

WordPress 非常擅长在 VPS 或云中快速生成博客, 但它的轻松也是它最大的缺陷.

拥有一个网站是多么简单, 互联网上绝大多数的页面都是使用它的,因此这吸引了那些寻找其开源编程缺陷的人.



继续阅读 > >

乌本图上的码头. 服务 nginx 无法生成: ADD 失败: 统计 /var/lib/docker/tmp/docker-builder(;)/startup.sh: 没有这样的文件或目录

乌本图的码头

有时, 使用拉多克时, 在尝试容器重建后,将发生此错误。 no such file or directory 消息上 docker-compose up -d –build nginx 命令.

我不清楚什么是实际问题, 但运行命令与sudo, 我们可以成功运行它.

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.

使用 sudo 构建容器后, 可以卸载它,并重新加载,而无需 sudo.

Servidor de Email –; 部分 4 ; 后缀 3

部分 1 ; 配置 main. cf 文件

这是在 CentOS 中创建邮件服务器过程的第四部分 8 和后缀配置的第一部分. 如果你是偶然来到这里的, 最好先阅读下面的出版物之一:

部分 1 ; 软件包的安装

部分 2 ; 配置 MariaDB

部分 3 ; Dovecot 配置

后缀是我们邮件服务器最重要的部分. 他将负责与其他 Mta 交谈, 以便您接收和发送电子邮件, 并使其能够到达, 因此他必须通过服务器的名称或您的 主机 名.



继续阅读 > >

Servidor de Email –; 部分 3 ; 多韦科特

这是在 CentOS 上创建邮件服务器过程的第三部分 8. 如果你是偶然来到这里的, 您应该先阅读以前的出版物

部分 1 ; 软件包的安装

部分 2 ; 配置 MariaDB

Dovecot 是 MDA (邮件传递代理) 它是将消息从 Postfix 传输到虚拟邮件框的代理. 在本节中, 我们将配置 Dovecot 安装, 以强制用户在连接时使用 SSL, 以这种方式永远不会在纯文本模式下发送密码.

我总是喜欢保留任何定义的原始文件, 如果我最终在设置过程中迷路. 我可以说, 这一步是不需要的, 如果你正在做本教程完全, 然而, 如果你已经有了以前的配置, 只是用它来改进它, 我强烈建议你复制你的文件.

在我们的案例, 配置文件将在 /奥沃夫奇/. 然后, 我们可以使用命令进行复制:



继续阅读 > >

Servidor de Email –; 部分 2 ; MariaDB

这是在 CentOS 上创建邮件服务器的过程的第二部分 8. 如果你是偶然来到这里的, 您应首先阅读上的上一份出版物。 软件包的安装

为什么使用 Mariabb/mysql?

首先, 我必须澄清, 我更喜欢使用 PostgreSQL 而不是 mariabsp mysql, 原因有很多, 然而, 有一个因素是反对在具有 WordPress 和电子邮件服务的统一服务器中使用 PostgreSQL, 这是一个简单的事实, 即 WP 没有对 PostgreSQL 的本机支持. 您可以在官方 WordPress 文档中获得有关此主题的更多信息 此链接. 我如何根据个人经验编写本文档, 以及小型服务, 我使用的是最常见和最容易访问的. 如果您感兴趣的是 PostgreSQL 的使用, 稍后, 您可以查阅本文档, 在这里我将向您展示如何从 MariaDB 迁移到 PostgreSQL.

配置 Mariab/mysql

假设您遵循本手册的步骤, 您将有一个安装 MariaDB 仍未配置. 如果您已经有了功能安装, 您可以跳到 下一步.



继续阅读 > >

数据表 + Html 5 出口按钮 + 拉拉维尔-米格 (网络包)

在最后的日子里, 我遇到一个问题,试图使用 数据表 引导 4 支持将结果导出到 Excel Pdf 使用 拉拉维尔-米格. 数小时后,尝试将所有脚本协同工作, 我终于赢了. 所以, 我决定写这个小 如何 对于那些有同样麻烦的人.



继续阅读 > >

J5 链接

这里有一些有用的链接, 三星 J5 手机.

谷歌帐户验证旁路