Tạo ra các số CPF (Cadastro de Pessoas Físicas) hợp lệ và ngẫu nhiên cho mục đích kiểm thử. Công cụ này tạo ra các số CPF tuân thủ định dạng và quy tắc xác thực chính thức của Brazil, mà không sử dụng bất kỳ thông tin cá nhân thực nào.
CPF (Cadastro de Pessoas Físicas) là một mã định danh duy nhất được cấp cho công dân và cư dân Brazil cho mục đích thuế. Trình tạo này tạo ra các số CPF hợp lệ, ngẫu nhiên cho mục đích thử nghiệm. Điều quan trọng cần lưu ý là các CPF được tạo ra này không liên kết với các cá nhân thực và chỉ nên được sử dụng trong môi trường thử nghiệm.
Một CPF bao gồm 11 chữ số:
Định dạng thường được biểu diễn là: XXX.XXX.XXX-XX
Thuật toán xác thực CPF đảm bảo tính toàn vẹn của số. Đây là cách thức hoạt động:
Công thức để tạo ra một CPF hợp lệ như sau:
1def generate_cpf():
2 # Tạo 9 chữ số ngẫu nhiên
3 base_cpf = [random.randint(0, 9) for _ in range(9)]
4
5 # Tính chữ số kiểm tra đầu tiên
6 sum_1 = sum((10 - i) * digit for i, digit in enumerate(base_cpf))
7 check_digit_1 = (sum_1 * 10 % 11) % 10
8
9 # Tính chữ số kiểm tra thứ hai
10 sum_2 = sum((11 - i) * digit for i, digit in enumerate(base_cpf + [check_digit_1]))
11 check_digit_2 = (sum_2 * 10 % 11) % 10
12
13 return base_cpf + [check_digit_1, check_digit_2]
14
Trình tạo thực hiện các bước sau:
Dưới đây là một số ví dụ về các CPF được tạo ra:
Trình tạo CPF hữu ích trong nhiều kịch bản phát triển phần mềm và thử nghiệm:
Mặc dù CPF là mã định danh cá nhân chính ở Brazil, còn có các mã định danh khác có thể được sử dụng trong các ngữ cảnh cụ thể:
CPF được giới thiệu ở Brazil vào năm 1965 như một phần của nỗ lực rộng lớn hơn để hiện đại hóa hệ thống thuế của đất nước. Ban đầu, nó chủ yếu được sử dụng cho mục đích thuế thu nhập, nhưng theo thời gian, việc sử dụng của nó đã mở rộng sang nhiều lĩnh vực khác trong bộ máy hành chính và thương mại của Brazil.
Các cột mốc quan trọng trong lịch sử CPF:
Ngày nay, CPF là một phần thiết yếu trong các tương tác của công dân và cư dân Brazil với các dịch vụ chính phủ, các tổ chức tài chính và nhiều giao dịch thương mại.
Dưới đây là các đoạn mã để tạo và xác thực CPF trong nhiều ngôn ngữ lập trình khác nhau:
1import random
2
3def generate_cpf():
4 cpf = [random.randint(0, 9) for _ in range(9)]
5 for _ in range(2):
6 value = sum((cpf[num] * ((len(cpf) + 1) - num) for num in range(len(cpf)))) % 11
7 cpf.append(11 - value if value > 1 else 0)
8 return ''.join(map(str, cpf))
9
10def validate_cpf(cpf):
11 numbers = [int(digit) for digit in cpf if digit.isdigit()]
12 if len(numbers) != 11 or len(set(numbers)) == 1:
13 return False
14 for i in range(9, 11):
15 value = sum((numbers[num] * ((i + 1) - num) for num in range(i))) % 11
16 if numbers[i] != (11 - value if value > 1 else 0):
17 return False
18 return True
19
20## Ví dụ sử dụng
21cpf = generate_cpf()
22print(f"CPF được tạo: {cpf}")
23print(f"Có hợp lệ: {validate_cpf(cpf)}")
24
1function generateCPF() {
2 const cpf = Array.from({length: 9}, () => Math.floor(Math.random() * 10));
3 for (let i = 0; i < 2; i++) {
4 let sum = cpf.reduce((acc, cur, idx) => acc + cur * (cpf.length + 1 - idx), 0);
5 let digit = 11 - (sum % 11);
6 cpf.push(digit > 9 ? 0 : digit);
7 }
8 return cpf.join('');
9}
10
11function validateCPF(cpf) {
12 const numbers = cpf.match(/\d/g).map(Number);
13 if (numbers.length !== 11 || new Set(numbers).size === 1) return false;
14 for (let i = 9; i < 11; i++) {
15 let sum = numbers.slice(0, i).reduce((acc, cur, idx) => acc + cur * (i + 1 - idx), 0);
16 let digit = 11 - (sum % 11);
17 if (numbers[i] !== (digit > 9 ? 0 : digit)) return false;
18 }
19 return true;
20}
21
22// Ví dụ sử dụng
23const cpf = generateCPF();
24console.log(`CPF được tạo: ${cpf}`);
25console.log(`Có hợp lệ: ${validateCPF(cpf)}`);
26
1import java.util.Random;
2
3public class CPFGenerator {
4 private static final Random random = new Random();
5
6 public static String generateCPF() {
7 int[] cpf = new int[11];
8 for (int i = 0; i < 9; i++) {
9 cpf[i] = random.nextInt(10);
10 }
11 cpf[9] = calculateCheckDigit(cpf, 10);
12 cpf[10] = calculateCheckDigit(cpf, 11);
13 return formatCPF(cpf);
14 }
15
16 private static int calculateCheckDigit(int[] cpf, int factor) {
17 int sum = 0;
18 for (int i = 0; i < factor - 1; i++) {
19 sum += cpf[i] * (factor - i);
20 }
21 int result = 11 - (sum % 11);
22 return result > 9 ? 0 : result;
23 }
24
25 private static String formatCPF(int[] cpf) {
26 return String.format("%d%d%d.%d%d%d.%d%d%d-%d%d",
27 cpf[0], cpf[1], cpf[2], cpf[3], cpf[4], cpf[5], cpf[6], cpf[7], cpf[8], cpf[9], cpf[10]);
28 }
29
30 public static boolean validateCPF(String cpf) {
31 cpf = cpf.replaceAll("[^0-9]", "");
32 if (cpf.length() != 11) return false;
33 int[] numbers = cpf.chars().map(Character::getNumericValue).toArray();
34 if (allEqual(numbers)) return false;
35 int digit10 = calculateCheckDigit(numbers, 10);
36 int digit11 = calculateCheckDigit(numbers, 11);
37 return numbers[9] == digit10 && numbers[10] == digit11;
38 }
39
40 private static boolean allEqual(int[] array) {
41 for (int i = 1; i < array.length; i++) {
42 if (array[i] != array[0]) return false;
43 }
44 return true;
45 }
46
47 public static void main(String[] args) {
48 String cpf = generateCPF();
49 System.out.println("CPF được tạo: " + cpf);
50 System.out.println("Có hợp lệ: " + validateCPF(cpf));
51 }
52}
53
Những ví dụ này minh họa cách tạo và xác thực CPF trong Python, JavaScript và Java. Bạn có thể điều chỉnh các hàm này theo nhu cầu cụ thể của mình hoặc tích hợp chúng vào các hệ thống lớn hơn yêu cầu xử lý CPF.
Khi sử dụng các CPF được tạo ra, điều quan trọng là phải ghi nhớ các điểm sau:
Khám phá thêm các công cụ có thể hữu ích cho quy trình làm việc của bạn