joke2k / faker

Faker is a Python package that generates fake data for you.
https://faker.readthedocs.io
MIT License
17.62k stars 1.92k forks source link

BE Vat Numbers should have a modulo 97 check and start wit 1 or 0 #2037

Closed JorisSpruyt closed 4 months ago

JorisSpruyt commented 4 months ago

VAT Numbers generated in Belgium (currently set-up in the provider ssn for locale nl_BE should start with 1 or 0 and have a controle number with a module 97 check.

Refer to https://en.wikipedia.org/wiki/VAT_identification_number

Steps to reproduce

  1. Generate vat_id wit locale nl_BE

Expected behavior

Vat numbers should be starting with BE0 or BE1 and have a module 97 check as the last two numbers

JorisSpruyt commented 4 months ago

Suggested re-write:

` def vat_id(self) -> str:

    vat_id_random_section = (
        '#######'
    )

    vat_id_possible_initial_numbers = (
        '0',
        '1'
    )
    """
    http://ec.europa.eu/taxation_customs/vies/faq.html#item_11
    https://en.wikipedia.org/wiki/VAT_identification_number
    :return: A random Belgian VAT ID starting with 0 or 1 and has a correct checksum with a modulo 97 check
    """
    generated_initial_number = self.random_element(vat_id_possible_initial_numbers)
    vat_without_check = self.bothify(generated_initial_number + vat_id_random_section)
    vat_as_int = int(vat_without_check)
    vat_check = 97 - (vat_as_int % 97)
    vat_check_str = f"{vat_check:0>2}"

    return "BE" + vat_without_check + vat_check_str

`

stefan6419846 commented 4 months ago

You are of course invited to propose a corresponding PR to fix this issue.

JorisSpruyt commented 4 months ago

Thanks @stefan6419846 , I was not sure about the workflow on github but I think i was able to do it. https://github.com/joke2k/faker/pull/2038 This issue should be closed as duplicate or something?