CPF 介绍
是什么:巴西个人纳税人注册号,相当于中国的身份证号码。
格式:11位数字,格式 XXX.XXX.XXX-XX
结构:
- 前9位:基础号码
- 最后2位:验证码
Python 示例
python
import random
def validate_cpf(cpf):
"""验证 CPF 格式和验证码"""
cpf = ''.join(filter(str.isdigit, cpf))
if len(cpf) != 11 or len(set(cpf)) == 1:
return False
# 计算第一个验证码
total = sum(int(cpf[i]) * (10 - i) for i in range(9))
digit1 = 11 - (total % 11)
digit1 = 0 if digit1 > 9 else digit1
# 计算第二个验证码
total = sum(int(cpf[i]) * (11 - i) for i in range(10))
digit2 = 11 - (total % 11)
digit2 = 0 if digit2 > 9 else digit2
return int(cpf[9]) == digit1 and int(cpf[10]) == digit2
def generate_cpf():
"""生成有效的 CPF 号码"""
base = [random.randint(0, 9) for _ in range(9)]
# 计算第一个验证码
total = sum(base[i] * (10 - i) for i in range(9))
digit1 = 11 - (total % 11)
base.append(0 if digit1 > 9 else digit1)
# 计算第二个验证码
total = sum(base[i] * (11 - i) for i in range(10))
digit2 = 11 - (total % 11)
base.append(0 if digit2 > 9 else digit2)
cpf = ''.join(map(str, base))
return f"{cpf[:3]}.{cpf[3:6]}.{cpf[6:9]}-{cpf[9:]}"
# 使用示例
cpf = generate_cpf()
print(f"生成的 CPF: {cpf}")
print(f"验证结果: {validate_cpf(cpf)}")
输出示例:
text
生成的 CPF: 123.456.789-09 验证结果: True
主要用途
- 税务申报
- 银行开户
- 就业登记
- 医疗保健
- 教育注册
验证规则:
- 不能所有数字相同
- 必须符合验证码算法
- 格式为 11 位数字
一句话总结:CPF 是巴西个人的官方税务识别码,包含基础号码和验证码,用于所有个人金融和行政事务。
CPF vs CNPJ:核心区别
| 维度 | CPF | CNPJ |
|---|---|---|
| 适用对象 | 个人(自然人) | 企业/组织(法人) |
| 号码长度 | 11位数字 | 14位数字 |
| 格式 | XXX.XXX.XXX-XX | XX.XXX.XXX/XXXX-XX |
| 验证码位数 | 2位 | 2位 |
| 基础号码 | 前9位 | 前12位(8位注册号 + 4位分支机构) |
关键区别说明
1. 用途范围
- CPF:个人税务、银行账户、就业、医疗
- CNPJ:企业注册、开发票、商业合同、公司银行账户
2. 结构差异
- CPF:简单序列
基础号码(9位) + 验证码(2位) - CNPJ:分层结构
注册号(8位) + 分支机构(4位) + 验证码(2位)
3. 验证规则
- CPF 验证权重:
10-2和11-2 - CNPJ 验证权重:
5-2和6-2
一句话总结:CPF 用于个人,CNPJ 用于企业;前者11位标识自然人,后者14位标识法人实体,两者在巴西商业生态中互补共存。