File: //home/arjun/projects/env/lib/python3.10/site-packages/faker/providers/ssn/fr_CH/__init__.py
from typing import List
from .. import Provider as SsnProvider
class Provider(SsnProvider):
ssn_formats = ("###.####.####.##",)
def ssn(self) -> str:
"""
Returns a 13 digits Swiss SSN named AHV (German) or
AVS (French and Italian)
See: http://www.bsv.admin.ch/themen/ahv/00011/02185/
"""
def _checksum(digits):
evensum = sum(digits[:-1:2])
oddsum = sum(digits[1::2])
return (10 - ((evensum + oddsum * 3) % 10)) % 10
digits: List[int] = [7, 5, 6]
# create an array of first 9 elements initialized randomly
digits += self.generator.random.sample(range(10), 9)
# determine the last digit to make it qualify the test
digits.append(_checksum(digits))
# repeat steps until it does qualify the test
digits_ = "".join([str(d) for d in digits])
return f"{digits_[:3]}.{digits_[3:7]}.{digits_[7:11]}.{digits_[11:]}"
def vat_id(self) -> str:
"""
:return: Swiss UID number
"""
def _checksum(digits):
code = ["8", "6", "4", "2", "3", "5", "9", "7"]
remainder = 11 - (sum(map(lambda x, y: int(x) * int(y), code, digits)) % 11)
if remainder == 10:
return 0
elif remainder == 11:
return 5
return remainder
vat_id: str = self.numerify("########")
return "CHE" + vat_id + str(_checksum(vat_id))