stdnum.ch.uid

UID (Unternehmens-Identifikationsnummer, Swiss business identifier).

The Swiss UID is used to uniquely identify businesses for taxation purposes. The number consists of a fixed “CHE” prefix, followed by 9 digits that are protected with a simple checksum.

This module only supports the “new” format that was introduced in 2011 which completely replaced the “old” 6-digit format in 2014. Stripped numbers without the CHE prefix are allowed and validated, but are returned with the prefix prepended.

More information:

>>> validate('CHE-100.155.212')
'CHE100155212'
>>> validate('100.155.212')
'CHE100155212'
>>> validate('CHE-100.155.213')
Traceback (most recent call last):
    ...
InvalidChecksum: ...
>>> format('CHE100155212')
'CHE-100.155.212'
stdnum.ch.uid.calc_check_digit(number: str) str

Calculate the check digit for organisations. The number passed should not have the check digit included.

stdnum.ch.uid.check_uid(number: str, timeout: float = 30, verify: bool | str = True) dict[str, Any] | None

Look up information via the Swiss Federal Statistical Office web service.

This uses the UID registry web service run by the the Swiss Federal Statistical Office to provide more details on the provided number.

The timeout argument specifies the network timeout in seconds.

The verify argument is either a boolean that determines whether the server’s certificate is validate or a string which must be a path the CA certificate bundle to use for verification.

Returns a dict-like object for valid numbers with the following structure:

{
    'organisation': {
        'organisationIdentification': {
            'uid': {'uidOrganisationIdCategorie': 'CHE', 'uidOrganisationId': 113690319},
            'OtherOrganisationId': [
                {'organisationIdCategory': 'CH.ESTVID', 'organisationId': '052.0111.1006'},
            ],
            'organisationName': 'Staatssekretariat für Migration SEM Vermietung von Parkplätzen',
            'legalForm': '0220',
        },
        'address': [
            {
                'addressCategory': 'LEGAL',
                'street': 'Quellenweg',
                'houseNumber': '6',
                'town': 'Wabern',
                'countryIdISO2': 'CH',
            },
        ],
    },
    'uidregInformation': {
        'uidregStatusEnterpriseDetail': '3',
        ...
    },
    'vatRegisterInformation': {
        'vatStatus': '2',
        'vatEntryStatus': '1',
        ...
    },
}

See the following document for more details on the GetByUID return value https://www.bfs.admin.ch/bfs/en/home/registers/enterprise-register/enterprise-identification/uid-register/uid-interfaces.html

stdnum.ch.uid.compact(number: str) str

Convert the number to the minimal representation. This strips surrounding whitespace and separators.

stdnum.ch.uid.format(number: str) str

Reformat the number to the standard presentation format.

stdnum.ch.uid.is_valid(number: str) bool

Check if the number is a valid UID.

stdnum.ch.uid.validate(number: str) str

Check if the number is a valid UID. This checks the length, formatting and check digit.