Algoritimo de validação de CPF brasileiro –; 个人注册

我在学什么,在这个地球上的步行

Algoritimo de validação de CPF brasileiro –; 个人注册

在本文中,我将逐步解释算法的转换,以验证 CPF 到 PHP 代码的有效性.

如果您已经知道算法并希望直接转到可用代码, 请单击此处.

但什么是公积金?

公积金是个人注册的首字母缩写. 这是目前由国税局管理和发布的一些巴西文件. 每个巴西人都有权 (或职责) 拥有一个并且只有它才能访问银行服务, 报名参加公立本科课程, 通过公开招标上任, 有信用卡, 除其他例子外.

森林合作伙伴关系的组成

公积金由以下部分组成: 十一位数字, 和 最后三位数字 具有我们将在下面解释的含义.

第九位数字, 从左到右阅读, 表示 税务区域 发行地. 从 0 到 9 的数字有十个区域,如下表所示.

1 –DF, 去, 女士, MT 和 TO
2 –交流, 是, 美联社, PA, 反渗透和反渗透
3 –电子商务, 硕士和圆周率
4 –铝, 铅, 体育, 注册护士
5 - 学士和东南
6 –毫克
7 - ES 和 RJ
8 –SP
9 - 公关和SC
0 - RS

前八位数字是基数.

最后两位数字是结帐数字.

这些数字是根据以下规则计算前九位数字生成的:

第一位数字检查器

对于第一个数字, 我们拿了 8 第一个数字,然后将它们中的每一个乘以一个以 10 以及我们向右推进的程度, 我们减少 1 这个乘数,我们将所有结果相加.

为了更好地理解, 拿 123.456.789-扎伊 作为CPF具有数字的示例 扎伊 故意.

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
添加 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 有 210.

现在, 获得总数后,我们有两种方法可以到达数字检查器.

方法 1

乘 210 由 10, 我们除以 11 剩下的我们拿走了.

然后我们有: 210 x 10 = 2.100

2.100 / 11 = 190 休息 10.

如果其余的是 10 检查数字为零, 否则, 其余的是检查数字.

在我们的案例, 其余等于 10 第一个数字将是 0 (零).

方法 2

我们得到其余的划分 210 由 11.

然后我们有: 210 / 11 等于 19 休息 1.

这是其余时间的规则 0 (零) 或 1 (一). 发生这种情况时,检查器数字为 , 否则我们减去其余的 11 获取检查数字.

就我们的情况而言, 当我们休息时 1, 我们的第一个校验位将是 0 (零).

第二位数字检查器

获取第二位检查器, 我们将第一个校验位添加到 9 初始数字,我们再次执行与第一个数字相同的过程, 不同之处在于我们现在从第二个数字开始.

我们的公积金已经具有价值 123.456.789-0X 必要的操作如下.
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
添加 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 有 244.

现在, 获得总数后,我们应该使用已经解释过的两种方法之一来获得校验位.

方法 1

乘 244 由 10, 我们除以 11 剩下的我们拿走了.

然后我们有: 244 x 10 = 2.440

2.440 / 11 = 221 休息 9.

如果其余的是 10 检查数字为零, 否则, 其余的是检查器数字,在我们的例子中,我们有 9 作为第二位数字检查器.

方法 2

我们得到其余的划分 244 由 11.

然后我们有: 244 / 11 等于 22 休息 2.

请记住,我们有一个规则,其余的什么时候 0 (零) 或 1 (一) 检查数字为零.

如果大于 1 从 11 获取检查数字.

就我们的情况而言, 有 11 ; 2 = 9 作为我们的第二位数字检查器,它与该方法中获得的值相同 1.

公积金有发行限额?

理论上, 我们最多可以有 10^8 或 100.000.000 (一亿) 每个区域的可能组合. 在实践中,由于不使用重复的数字,我们的数字少了一点, 举个例子. 虽然看起来是一个相当大的数字, 它应该在某个时候翻新, 因为即使一个人死了也不能重复使用.

假设它们已经存在于该地区 8 (在圣保罗住宿) 大约 40 发行了数百万份公积金 (我无法获得可靠的数据 2022 所以我使用的常住人口的大致数量是 44,5 数百万人), 将大约留下 60 数以百万计的公积金可用. 以目前公积金的增长率 (年份 2022) 在关于 600 一年一千, 系统应保持在正下方 100 年.

我们在关于公积金组成的解释和示例的最后来到这里. 我们的公积金样本是 123.456.789-09. 下面我们有一些代码示例,用于生成结帐数字, 验证它们多少.

代码

版本 PHP.

版本 Javascript.

2 反应

  1. [;] 我根据巴西公积金有效性 – 佩索阿菲西卡的卡斯特罗一文中的解释得到的最低圈复杂度. 在第二个数字化测试仪的计算时略有变化. 相反 [;]

  2. [;] 我根据文章中的解释得到的圈复杂度线的数量 巴西CPF的验证算法 – Cadastro de Pessoa Física. 在第二个数字化测试仪的计算时略有变化. 相反 [;]

留言

您的电子邮件地址将不会发布. 标记必填的字段 *

此网站使用 Akismet 减少垃圾邮件. 了解如何处理注释数据.