summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/faker/providers/ssn/en_US')
-rw-r--r--venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__init__.py235
-rw-r--r--venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__pycache__/__init__.cpython-311.pycbin0 -> 6616 bytes
2 files changed, 235 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__init__.py b/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__init__.py
new file mode 100644
index 0000000..66f2a32
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__init__.py
@@ -0,0 +1,235 @@
+from typing import List
+
+from .. import Provider as BaseProvider
+
+
+class Provider(BaseProvider):
+ INVALID_SSN_TYPE = "INVALID_SSN"
+ SSN_TYPE = "SSN"
+ ITIN_TYPE = "ITIN"
+ EIN_TYPE = "EIN"
+
+ def itin(self) -> str:
+ """Generate a random United States Individual Taxpayer Identification Number (ITIN).
+
+ An United States Individual Taxpayer Identification Number
+ (ITIN) is a tax processing number issued by the Internal
+ Revenue Service. It is a nine-digit number that always begins
+ with the number 9 and has a range of 70-88 in the fourth and
+ fifth digit. Effective April 12, 2011, the range was extended
+ to include 900-70-0000 through 999-88-9999, 900-90-0000
+ through 999-92-9999 and 900-94-0000 through 999-99-9999.
+ https://www.irs.gov/individuals/international-taxpayers/general-itin-information
+ """
+
+ area = self.random_int(min=900, max=999)
+ serial = self.random_int(min=0, max=9999)
+
+ # The group number must be between 70 and 99 inclusively but not 89 or 93
+ group: int = self.random_element([x for x in range(70, 100) if x not in [89, 93]])
+
+ itin = f"{area:03d}-{group:02d}-{serial:04d}"
+ return itin
+
+ def ein(self) -> str:
+ """Generate a random United States Employer Identification Number (EIN).
+
+ An United States An Employer Identification Number (EIN) is
+ also known as a Federal Tax Identification Number, and is
+ used to identify a business entity. EINs follow a format of a
+ two-digit prefix followed by a hyphen and a seven-digit sequence:
+ ##-######
+
+ https://www.irs.gov/businesses/small-businesses-self-employed/employer-id-numbers
+ """
+
+ # Only certain EIN Prefix values are assigned:
+ #
+ # https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes
+
+ ein_prefix_choices: List[str] = [
+ "01",
+ "02",
+ "03",
+ "04",
+ "05",
+ "06",
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "15",
+ "16",
+ "20",
+ "21",
+ "22",
+ "23",
+ "24",
+ "25",
+ "26",
+ "27",
+ "30",
+ "31",
+ "32",
+ "33",
+ "34",
+ "35",
+ "36",
+ "37",
+ "38",
+ "39",
+ "40",
+ "41",
+ "42",
+ "43",
+ "44",
+ "45",
+ "46",
+ "47",
+ "48",
+ "50",
+ "51",
+ "52",
+ "53",
+ "54",
+ "55",
+ "56",
+ "57",
+ "58",
+ "59",
+ "60",
+ "61",
+ "62",
+ "63",
+ "64",
+ "65",
+ "66",
+ "67",
+ "68",
+ "71",
+ "72",
+ "73",
+ "74",
+ "75",
+ "76",
+ "77",
+ "80",
+ "81",
+ "82",
+ "83",
+ "84",
+ "85",
+ "86",
+ "87",
+ "88",
+ "90",
+ "91",
+ "92",
+ "93",
+ "94",
+ "95",
+ "98",
+ "99",
+ ]
+
+ ein_prefix: str = self.random_element(ein_prefix_choices)
+ sequence = self.random_int(min=0, max=9999999)
+
+ ein = f"{ein_prefix:s}-{sequence:07d}"
+ return ein
+
+ def invalid_ssn(self) -> str:
+ """Generate a random invalid United States Social Security Identification Number (SSN).
+
+ Invalid SSNs have the following characteristics:
+ Cannot begin with the number 9
+ Cannot begin with 666 in positions 1 - 3
+ Cannot begin with 000 in positions 1 - 3
+ Cannot contain 00 in positions 4 - 5
+ Cannot contain 0000 in positions 6 - 9
+
+ https://www.ssa.gov/kc/SSAFactSheet--IssuingSSNs.pdf
+
+ Additionally, return an invalid SSN that is NOT a valid ITIN by excluding certain ITIN related "group" values
+ """
+ itin_group_numbers = [
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 90,
+ 91,
+ 92,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ ]
+ area = self.random_int(min=0, max=999)
+ if area < 900 and area not in {666, 0}:
+ random_group_or_serial = self.random_int(min=1, max=1000)
+ if random_group_or_serial <= 500:
+ group = 0
+ serial = self.random_int(0, 9999)
+ else:
+ group = self.random_int(0, 99)
+ serial = 0
+ elif area in {666, 0}:
+ group = self.random_int(0, 99)
+ serial = self.random_int(0, 9999)
+ else:
+ group = self.random_element([x for x in range(0, 100) if x not in itin_group_numbers])
+ serial = self.random_int(0, 9999)
+
+ invalid_ssn = f"{area:03d}-{group:02d}-{serial:04d}"
+ return invalid_ssn
+
+ def ssn(self, taxpayer_identification_number_type: str = SSN_TYPE) -> str:
+ """Generate a random United States Taxpayer Identification Number of the specified type.
+
+ If no type is specified, a US SSN is returned.
+ """
+
+ if taxpayer_identification_number_type == self.ITIN_TYPE:
+ return self.itin()
+ elif taxpayer_identification_number_type == self.EIN_TYPE:
+ return self.ein()
+ elif taxpayer_identification_number_type == self.INVALID_SSN_TYPE:
+ return self.invalid_ssn()
+ elif taxpayer_identification_number_type == self.SSN_TYPE:
+ # Certain numbers are invalid for United States Social Security
+ # Numbers. The area (first 3 digits) cannot be 666 or 900-999.
+ # The group number (middle digits) cannot be 00. The serial
+ # (last 4 digits) cannot be 0000.
+
+ area = self.random_int(min=1, max=899)
+ if area == 666:
+ area += 1
+ group = self.random_int(1, 99)
+ serial = self.random_int(1, 9999)
+
+ ssn = f"{area:03d}-{group:02d}-{serial:04d}"
+ return ssn
+
+ else:
+ raise ValueError(
+ "taxpayer_identification_number_type must be one of 'SSN', 'EIN', 'ITIN'," " or 'INVALID_SSN'."
+ )
diff --git a/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..99668a6
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/faker/providers/ssn/en_US/__pycache__/__init__.cpython-311.pyc
Binary files differ