Whiz Tools

สร้าง CPF

CPF Generator

Introduction

CPF (Cadastro de Pessoas Físicas) เป็นตัวระบุเฉพาะที่มอบให้กับพลเมืองและผู้อยู่อาศัยในบราซิลเพื่อวัตถุประสงค์ด้านภาษี เครื่องมือนี้สร้างหมายเลข CPF แบบสุ่มที่ถูกต้องสำหรับการทดสอบ สิ่งสำคัญคือต้องทราบว่าหมายเลข CPF ที่สร้างขึ้นเหล่านี้ไม่มีความเกี่ยวข้องกับบุคคลจริงและควรใช้ในสภาพแวดล้อมการทดสอบเท่านั้น

Structure of a CPF

CPF ประกอบด้วย 11 หลัก:

  • 9 หลักแรกเป็นหมายเลขฐาน
  • 2 หลักสุดท้ายเป็นหลักตรวจสอบ

รูปแบบมักจะถูกแทนที่ด้วย: XXX.XXX.XXX-XX

CPF Validation Algorithm

อัลกอริธึมการตรวจสอบ CPF จะช่วยให้แน่ใจในความถูกต้องของหมายเลข วิธีการทำงานมีดังนี้:

  1. คูณ 9 หลักแรกด้วยน้ำหนัก (10 ถึง 2)
  2. หาผลรวมของผลลัพธ์
  3. คำนวณเศษของผลรวมที่หารด้วย 11
  4. หากเศษน้อยกว่า 2 หลักตรวจสอบแรกคือ 0; มิฉะนั้นคือ 11 ลบเศษ
  5. ทำซ้ำกระบวนการสำหรับ 10 หลักแรก (รวมถึงหลักตรวจสอบแรก) โดยใช้น้ำหนัก 11 ถึง 2
  6. คำนวณหลักตรวจสอบที่สองโดยใช้กฎเดียวกับหลักแรก

How to Use This Generator

  1. คลิกที่ปุ่ม "Generate CPF"
  2. CPF แบบสุ่มที่ถูกต้องจะปรากฏขึ้น
  3. คุณสามารถคัดลอก CPF ที่สร้างขึ้นเพื่อใช้ในสถานการณ์การทดสอบของคุณ

Formula

สูตรสำหรับการสร้าง CPF ที่ถูกต้องมีดังนี้:

def generate_cpf():
    # สุ่ม 9 หลัก
    base_cpf = [random.randint(0, 9) for _ in range(9)]
    
    # คำนวณหลักตรวจสอบแรก
    sum_1 = sum((10 - i) * digit for i, digit in enumerate(base_cpf))
    check_digit_1 = (sum_1 * 10 % 11) % 10
    
    # คำนวณหลักตรวจสอบที่สอง
    sum_2 = sum((11 - i) * digit for i, digit in enumerate(base_cpf + [check_digit_1]))
    check_digit_2 = (sum_2 * 10 % 11) % 10
    
    return base_cpf + [check_digit_1, check_digit_2]

Calculation

เครื่องมือสร้างจะดำเนินการตามขั้นตอนดังต่อไปนี้:

  1. สุ่ม 9 หลัก
  2. คำนวณหลักตรวจสอบแรกโดยใช้อัลกอริธึมที่อธิบายไว้ข้างต้น
  3. คำนวณหลักตรวจสอบที่สอง
  4. รวมทุกหลักเพื่อสร้าง CPF ที่สมบูรณ์

Examples

นี่คือตัวอย่างของ CPF ที่สร้างขึ้น:

  1. 123.456.789-09
  2. 987.654.321-00
  3. 111.222.333-96

Use Cases

เครื่องมือสร้าง CPF มีประโยชน์ในหลายสถานการณ์การพัฒนาและการทดสอบซอฟต์แวร์:

  1. การทดสอบฐานข้อมูล: เติมฐานข้อมูลทดสอบด้วยหมายเลข CPF ที่ถูกต้อง
  2. การตรวจสอบฟอร์ม: ทดสอบการตรวจสอบข้อมูลสำหรับแบบฟอร์มการลงทะเบียนผู้ใช้บราซิล
  3. การทดสอบ API: ใช้ CPF ที่สร้างขึ้นในคำขอ API ที่ต้องการการระบุของบราซิลที่ถูกต้อง
  4. การทดสอบประสิทธิภาพ: สร้างชุด CPF ที่ไม่ซ้ำกันและถูกต้องจำนวนมากสำหรับการทดสอบโหลด
  5. การทดสอบ UI/UX: ตรวจสอบการจัดรูปแบบและการแสดงผลของหมายเลข CPF ในส่วนติดต่อผู้ใช้

Alternatives

ในขณะที่ CPF เป็นตัวระบุหลักของบุคคลในบราซิล ยังมีตัวระบุอื่นๆ ที่อาจใช้ในบริบทเฉพาะ:

  1. RG (Registro Geral): เอกสารระบุตัวตนที่ออกโดยรัฐ
  2. CNPJ (Cadastro Nacional da Pessoa Jurídica): ใช้สำหรับธุรกิจและนิติบุคคล
  3. PIS/PASEP: ใช้เพื่อวัตถุประสงค์ที่เกี่ยวข้องกับการจ้างงาน

History

CPF ถูกนำมาใช้ในบราซิลในปี 1965 เป็นส่วนหนึ่งของความพยายามที่กว้างขึ้นในการปรับปรุงระบบภาษีของประเทศ ในตอนแรกมันถูกใช้เพื่อวัตถุประสงค์ด้านภาษีเงินได้ แต่เมื่อเวลาผ่านไป การใช้งานของมันได้ขยายไปยังพื้นที่อื่นๆ ของการบริหารราชการและการค้าของบราซิล

เหตุการณ์สำคัญในประวัติศาสตร์ CPF:

  • 1965: CPF ถูกนำมาใช้สำหรับบุคคล
  • 1972: CPF กลายเป็นข้อบังคับสำหรับบุคคลที่จ่ายภาษีทั้งหมด
  • 1990s: CPF เริ่มถูกใช้ในเชิงพาณิชย์และการทำธุรกรรมทางการเงินอย่างกว้างขวาง
  • 2000s: ระบบดิจิทัลรวม CPF เข้ากับชีวิตประจำวันในบราซิลมากขึ้น

ในปัจจุบัน CPF เป็นส่วนสำคัญของการมีปฏิสัมพันธ์ของพลเมืองและผู้อยู่อาศัยในบราซิลกับบริการของรัฐบาล สถาบันการเงิน และการทำธุรกรรมทางการค้าหลายประเภท

Code Examples

นี่คือตัวอย่างโค้ดสำหรับการสร้างและตรวจสอบ CPF ในหลายภาษาโปรแกรม:

import random

def generate_cpf():
    cpf = [random.randint(0, 9) for _ in range(9)]
    for _ in range(2):
        value = sum((cpf[num] * ((len(cpf) + 1) - num) for num in range(len(cpf)))) % 11
        cpf.append(11 - value if value > 1 else 0)
    return ''.join(map(str, cpf))

def validate_cpf(cpf):
    numbers = [int(digit) for digit in cpf if digit.isdigit()]
    if len(numbers) != 11 or len(set(numbers)) == 1:
        return False
    for i in range(9, 11):
        value = sum((numbers[num] * ((i + 1) - num) for num in range(i))) % 11
        if numbers[i] != (11 - value if value > 1 else 0):
            return False
    return True

## ตัวอย่างการใช้งาน
cpf = generate_cpf()
print(f"Generated CPF: {cpf}")
print(f"Is valid: {validate_cpf(cpf)}")
function generateCPF() {
    const cpf = Array.from({length: 9}, () => Math.floor(Math.random() * 10));
    for (let i = 0; i < 2; i++) {
        let sum = cpf.reduce((acc, cur, idx) => acc + cur * (cpf.length + 1 - idx), 0);
        let digit = 11 - (sum % 11);
        cpf.push(digit > 9 ? 0 : digit);
    }
    return cpf.join('');
}

function validateCPF(cpf) {
    const numbers = cpf.match(/\d/g).map(Number);
    if (numbers.length !== 11 || new Set(numbers).size === 1) return false;
    for (let i = 9; i < 11; i++) {
        let sum = numbers.slice(0, i).reduce((acc, cur, idx) => acc + cur * (i + 1 - idx), 0);
        let digit = 11 - (sum % 11);
        if (numbers[i] !== (digit > 9 ? 0 : digit)) return false;
    }
    return true;
}

// ตัวอย่างการใช้งาน
const cpf = generateCPF();
console.log(`Generated CPF: ${cpf}`);
console.log(`Is valid: ${validateCPF(cpf)}`);
import java.util.Random;

public class CPFGenerator {
    private static final Random random = new Random();

    public static String generateCPF() {
        int[] cpf = new int[11];
        for (int i = 0; i < 9; i++) {
            cpf[i] = random.nextInt(10);
        }
        cpf[9] = calculateCheckDigit(cpf, 10);
        cpf[10] = calculateCheckDigit(cpf, 11);
        return formatCPF(cpf);
    }

    private static int calculateCheckDigit(int[] cpf, int factor) {
        int sum = 0;
        for (int i = 0; i < factor - 1; i++) {
            sum += cpf[i] * (factor - i);
        }
        int result = 11 - (sum % 11);
        return result > 9 ? 0 : result;
    }

    private static String formatCPF(int[] cpf) {
        return String.format("%d%d%d.%d%d%d.%d%d%d-%d%d",
                cpf[0], cpf[1], cpf[2], cpf[3], cpf[4], cpf[5], cpf[6], cpf[7], cpf[8], cpf[9], cpf[10]);
    }

    public static boolean validateCPF(String cpf) {
        cpf = cpf.replaceAll("[^0-9]", "");
        if (cpf.length() != 11) return false;
        int[] numbers = cpf.chars().map(Character::getNumericValue).toArray();
        if (allEqual(numbers)) return false;
        int digit10 = calculateCheckDigit(numbers, 10);
        int digit11 = calculateCheckDigit(numbers, 11);
        return numbers[9] == digit10 && numbers[10] == digit11;
    }

    private static boolean allEqual(int[] array) {
        for (int i = 1; i < array.length; i++) {
            if (array[i] != array[0]) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        String cpf = generateCPF();
        System.out.println("Generated CPF: " + cpf);
        System.out.println("Is valid: " + validateCPF(cpf));
    }
}

ตัวอย่างเหล่านี้แสดงให้เห็นถึงวิธีการสร้างและตรวจสอบ CPF ใน Python, JavaScript และ Java คุณสามารถปรับฟังก์ชันเหล่านี้ให้เหมาะสมกับความต้องการเฉพาะของคุณหรือรวมเข้ากับระบบที่ใหญ่กว่าที่ต้องการการจัดการ CPF

Legal and Ethical Considerations

เมื่อใช้ CPF ที่สร้างขึ้น สิ่งสำคัญคือต้องคำนึงถึงประเด็นต่อไปนี้:

  1. CPF ที่สร้างขึ้นมีไว้เพื่อการทดสอบเท่านั้นและไม่ควรใช้เพื่อเลียนแบบบุคคลจริงหรือกิจกรรมฉ้อโกงใดๆ
  2. ระบุข้อมูลทดสอบที่มี CPF ที่สร้างขึ้นอย่างชัดเจนเพื่อป้องกันความสับสนกับข้อมูลส่วนบุคคลจริง
  3. ระวังกฎหมายและข้อบังคับการปกป้องข้อมูลในเขตอำนาจศาลของคุณเมื่อจัดการกับตัวระบุส่วนบุคคลแม้แต่ข้อมูลปลอม
  4. ในสภาพแวดล้อมการผลิต ให้ใช้ CPF ที่แท้จริงและได้รับการตรวจสอบจากผู้ใช้หรือแหล่งที่ได้รับอนุญาตเท่านั้น
  5. ใช้มาตรการรักษาความปลอดภัยที่เหมาะสมเพื่อปกป้อง CPF ทั้งจริงและที่สร้างขึ้นในระบบของคุณ

References

  1. Receita Federal do Brasil. "CPF - Cadastro de Pessoas Físicas." https://www.gov.br/receitafederal/pt-br/assuntos/orientacao-tributaria/cadastros/cpf
  2. Serpro. "Validador de CPF." https://www.serpro.gov.br/links-fixos-superiores/validador-cpf
  3. Ministério da Fazenda. "História do CPF." https://www.gov.br/fazenda/pt-br/assuntos/receita-federal
  4. 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."

เครื่องมือที่เกี่ยวข้อง

ข้อเสนอแนะ