テスト用の有効なランダムCPF番号生成ツール
テスト目的のために有効なランダムなCPF(Cadastro de Pessoas Físicas)番号を生成します。このツールは、実際の個人情報を使用せずに、公式のブラジル形式と検証ルールに準拠したCPFを作成します。
CPFを生成
ドキュメント
CPFジェネレーター
はじめに
CPF(Cadastro de Pessoas Físicas)は、ブラジル市民および居住者に税務目的で割り当てられる一意の識別子です。このジェネレーターは、テスト目的のために有効なランダムCPF番号を生成します。生成されたCPFは実在の個人に関連付けられていないことに注意が必要で、テスト環境でのみ使用されるべきです。
CPFの構造
CPFは11桁で構成されています:
- 最初の9桁は基本番号です
- 最後の2桁はチェックディジットです
形式は通常、XXX.XXX.XXX-XXとして表されます。
CPF検証アルゴリズム
CPF検証アルゴリズムは、番号の整合性を確保します。以下のように機能します:
- 最初の9桁を重み(10から2)で掛け算します
- 結果を合計します
- 合計を11で割った余りを計算します
- 余りが2未満の場合、最初のチェックディジットは0です。それ以外の場合は、11から余りを引いた値です
- 最初のチェックディジットを含む最初の10桁について、重みを11から2にして同じプロセスを繰り返します
- 最初のチェックディジットと同じルールで2番目のチェックディジットを計算します
このジェネレーターの使い方
- 「CPFを生成」ボタンをクリックします
- 有効なランダムCPFが表示されます
- 生成されたCPFをコピーして、テストシナリオで使用できます
公式
有効なCPFを生成するための公式は次のとおりです:
1def generate_cpf():
2 # 9桁のランダム数字を生成
3 base_cpf = [random.randint(0, 9) for _ in range(9)]
4
5 # 最初のチェックディジットを計算
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 # 2番目のチェックディジットを計算
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
計算
ジェネレーターは次の手順を実行します:
- 9桁のランダム数字を生成します
- 上記のアルゴリズムを使用して最初のチェックディジットを計算します
- 2番目のチェックディジットを計算します
- すべての数字を組み合わせて完全なCPFを形成します
例
生成されたCPFのいくつかの例を以下に示します:
- 123.456.789-09
- 987.654.321-00
- 111.222.333-96
使用ケース
CPFジェネレーターは、さまざまなソフトウェア開発およびテストシナリオで役立ちます:
- データベーステスト:テストデータベースに有効なCPF番号を埋め込む
- フォーム検証:ブラジルのユーザー登録フォームの入力検証をテスト
- APIテスト:有効なブラジルの識別が必要なAPIリクエストで生成されたCPFを使用
- パフォーマンステスト:負荷テストのためにユニークで有効なCPFの大規模セットを生成
- UI/UXテスト:ユーザーインターフェースでのCPF番号の適切なフォーマットと表示を確認
代替案
CPFはブラジルにおける主要な個人識別子ですが、特定の文脈で使用される他の識別子もあります:
- RG(Registro Geral):州発行の身分証明書
- CNPJ(Cadastro Nacional da Pessoa Jurídica):企業や法人用
- PIS/PASEP:雇用関連目的で使用
歴史
CPFは1965年にブラジルで導入され、国の税制を近代化するための広範な取り組みの一環として行われました。最初は主に所得税の目的で使用されていましたが、時間の経過とともに、ブラジルの官僚制度や商業のさまざまな分野での使用が拡大しました。
CPFの歴史における重要なマイルストーン:
- 1965年:個人のためにCPFが導入される
- 1972年:すべての納税者に対してCPFが義務化される
- 1990年代:商業および金融取引でのCPFの使用が広がる
- 2000年代:デジタルシステムが日常生活にCPFをさらに統合する
今日、CPFはブラジルの市民および居住者が政府サービス、金融機関、さまざまな商取引とやり取りする際の重要な部分です。
コード例
さまざまなプログラミング言語でCPFを生成および検証するためのコードスニペットを以下に示します:
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## 使用例
21cpf = generate_cpf()
22print(f"生成されたCPF: {cpf}")
23print(f"有効ですか: {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// 使用例
23const cpf = generateCPF();
24console.log(`生成されたCPF: ${cpf}`);
25console.log(`有効ですか: ${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: " + cpf);
50 System.out.println("有効ですか: " + validateCPF(cpf));
51 }
52}
53
これらの例は、Python、JavaScript、およびJavaでCPFを生成および検証する方法を示しています。これらの関数を特定のニーズに合わせて調整するか、CPF処理が必要なより大きなシステムに統合できます。
法的および倫理的考慮事項
生成されたCPFを使用する際には、以下の点に留意することが重要です:
- 生成されたCPFはテスト目的のみで使用されるべきで、実在の個人を偽装したり、詐欺行為に使用したりしてはいけません。
- 生成されたCPFを含むテストデータには明確なラベルを付けて、実際の個人データとの混同を防ぎます。
- 偽の個人識別子を扱う際には、管轄区域のデータ保護法および規制に注意してください。
- 本番環境では、常にユーザーまたは認可されたソースから提供された実際の確認済みCPFを使用してください。
- システム内で実際のCPFと生成されたCPFの両方を保護するために適切なセキュリティ対策を実施してください。
参考文献
- Receita Federal do Brasil. "CPF - Cadastro de Pessoas Físicas." https://www.gov.br/receitafederal/pt-br/assuntos/orientacao-tributaria/cadastros/cpf
- Serpro. "Validador de CPF." https://www.serpro.gov.br/links-fixos-superiores/validador-cpf
- Ministério da Fazenda. "História do CPF." https://www.gov.br/fazenda/pt-br/assuntos/receita-federal
- Lei nº 4.862, de 29 de novembro de 1965. "Altera a legislação do impôsto de renda, adota diversas medidas de ordem fiscal e fazendária, e dá outras providências."
フィードバック
フィードバックトーストをクリックして、このツールについてのフィードバックを始めてください
関連ツール
ワークフローに役立つかもしれない他のツールを発見してください