Skip to content

Commit

Permalink
Ajustes Cumbuca e de 'NIF' para 'TIN'
Browse files Browse the repository at this point in the history
  • Loading branch information
carolcardoso080 committed Feb 11, 2025
1 parent 275dc94 commit 476350c
Show file tree
Hide file tree
Showing 26 changed files with 185 additions and 448 deletions.
6 changes: 3 additions & 3 deletions brutils/phone.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def _generate_ddd_number(): # type() -> str
"""
Generate a valid DDD number.
"""
return f'{"".join([str(randint(1, 9)) for i in range(2)])}'
return f"{''.join([str(randint(1, 9)) for i in range(2)])}"


def _generate_mobile_phone():
Expand All @@ -197,7 +197,7 @@ def _generate_mobile_phone():
ddd = _generate_ddd_number()
client_number = [str(randint(0, 9)) for i in range(8)]

phone_number = f'{ddd}9{"".join(client_number)}'
phone_number = f"{ddd}9{''.join(client_number)}"

return phone_number

Expand All @@ -207,4 +207,4 @@ def _generate_landline_phone(): # type () -> str
Generate a valid and random landline phone number.
"""
ddd = _generate_ddd_number()
return f"{ddd}{randint(2,5)}{str(randint(0,9999999)).zfill(7)}"
return f"{ddd}{randint(2, 5)}{str(randint(0, 9999999)).zfill(7)}"
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from random import randint

from random import randint, choice

# REMOVE SYMBOLS
def remove_symbols(dirty_tin): # type: (str) -> str
Expand All @@ -8,7 +7,6 @@ def remove_symbols(dirty_tin): # type: (str) -> str
"""
return "".join(filter(str.isdigit, dirty_tin))


# VALIDATION FUNCTIONS
def is_valid_tfn(tfn): # type: (str) -> str
"""
Expand All @@ -29,13 +27,12 @@ def is_valid_tfn(tfn): # type: (str) -> str
return "Invalid TFN: Must be 8 or 9 numeric digits."

# Weighted checksum validation
weights = [1, 4, 3, 7, 5, 8, 6, 9, 10][: len(tfn)]
weights = [1, 4, 3, 7, 5, 8, 6, 9, 10][:len(tfn)]
checksum = sum(int(digit) * weight for digit, weight in zip(tfn, weights))
if checksum % 11 == 0:
return "Valid TFN"
return "Invalid TFN: Failed checksum validation."


def is_valid_abn(abn): # type: (str) -> str
"""
Validates an Australian Business Number (ABN).
Expand All @@ -62,7 +59,6 @@ def is_valid_abn(abn): # type: (str) -> str
return "Valid ABN"
return "Invalid ABN: Failed checksum validation."


# GENERATE FUNCTIONS
def generate_tfn(): # type: () -> str
"""
Expand All @@ -76,7 +72,6 @@ def generate_tfn(): # type: () -> str
if is_valid_tfn(tfn) == "Valid TFN":
return tfn


def generate_abn(): # type: () -> str
"""
Generates a valid Australian Business Number (ABN).
Expand All @@ -91,7 +86,6 @@ def generate_abn(): # type: () -> str
if is_valid_abn(abn) == "Valid ABN":
return abn


# FORMAT FUNCTIONS
def format_tfn(tfn): # type: (str) -> str
"""
Expand All @@ -111,7 +105,6 @@ def format_tfn(tfn): # type: (str) -> str
return f"{tfn[:2]} {tfn[2:5]} {tfn[5:]}"
return None


def format_abn(abn): # type: (str) -> str
"""
Formats an ABN as XX XXX XXX XXX.
Expand All @@ -127,20 +120,15 @@ def format_abn(abn): # type: (str) -> str
return f"{abn[:2]} {abn[2:5]} {abn[5:8]} {abn[8:]}"
return None


# USAGE EXAMPLES
def example_usage():
# Generate examples
generated_tfn = generate_tfn()
print(
f"Generated TFN: {generated_tfn} - Valid? {is_valid_tfn(generated_tfn)}"
)
print(f"Generated TFN: {generated_tfn} - Valid? {is_valid_tfn(generated_tfn)}")
print(f"Formatted TFN: {format_tfn(generated_tfn)}")

generated_abn = generate_abn()
print(
f"Generated ABN: {generated_abn} - Valid? {is_valid_abn(generated_abn)}"
)
print(f"Generated ABN: {generated_abn} - Valid? {is_valid_abn(generated_abn)}")
print(f"Formatted ABN: {format_abn(generated_abn)}")

# User input
Expand All @@ -154,6 +142,5 @@ def example_usage():
else:
print("Invalid input. Please enter a valid TFN or ABN.")


# Run example
example_usage()
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from random import randint
from random import randint, choice


# REMOVE SYMBOLS
Expand All @@ -8,7 +8,6 @@ def remove_symbols(dirty_tin): # type: (str) -> str
"""
return "".join(filter(str.isdigit, dirty_tin))


# VALIDATION FUNCTION
def is_valid(tin): # type: (str) -> str
"""
Expand All @@ -27,7 +26,6 @@ def is_valid(tin): # type: (str) -> str
return "Valid tin"
return "Invalid tin: Must be 9 or 13 numeric digits."


# GENERATE FUNCTION
def generate(tin_type="individual"): # type: (str) -> str
"""
Expand All @@ -46,7 +44,6 @@ def generate(tin_type="individual"): # type: (str) -> str
else:
raise ValueError("Invalid tin type. Use 'individual' or 'business'.")


# FORMAT FUNCTION
def format_tin(tin): # type: (str) -> str
"""
Expand All @@ -67,7 +64,6 @@ def format_tin(tin): # type: (str) -> str
return f"{tin[:4]} {tin[4:8]} {tin[8:]}" # Split into groups for 13-digit numbers
return None


# USER INPUT VALIDATION
def is_valid_user_input(user_input): # type: (str) -> str
"""
Expand All @@ -85,27 +81,21 @@ def is_valid_user_input(user_input): # type: (str) -> str
return f"Valid tin: {user_input}"
return "Invalid tin format."


# USAGE EXAMPLES
def example_usage():
# Generate examples
generated_individual_tin = generate("individual")
print(
f"Generated Individual tin: {generated_individual_tin} - Valid? {is_valid(generated_individual_tin)}"
)
print(f"Generated Individual tin: {generated_individual_tin} - Valid? {is_valid(generated_individual_tin)}")
print(f"Formatted Individual tin: {format_tin(generated_individual_tin)}")

generated_business_tin = generate("business")
print(
f"Generated Business tin: {generated_business_tin} - Valid? {is_valid(generated_business_tin)}"
)
print(f"Generated Business tin: {generated_business_tin} - Valid? {is_valid(generated_business_tin)}")
print(f"Formatted Business tin: {format_tin(generated_business_tin)}")

# User input
user_input = input("Enter an Austrian tin (with or without symbols): ")
print(is_valid_user_input(user_input))
print(f"Formatted tin: {format_tin(user_input)}")


# Run the example usage
example_usage()
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from random import randint
from random import randint, choice


# REMOVE SYMBOLS
Expand All @@ -8,7 +8,6 @@ def remove_symbols(dirty_tin): # type: (str) -> str
"""
return "".join(filter(str.isdigit, dirty_tin))


# VALIDATION FUNCTIONS
def is_valid_tin_individual(tin): # type: (str) -> str
"""
Expand All @@ -28,7 +27,6 @@ def is_valid_tin_individual(tin): # type: (str) -> str
return "Valid Individual TIN"
return "Invalid Individual TIN: Must be exactly 11 numeric digits."


def is_valid_tin_business(tin): # type: (str) -> str
"""
Validates an Australian Business TIN.
Expand All @@ -47,7 +45,6 @@ def is_valid_tin_business(tin): # type: (str) -> str
return "Valid Business TIN"
return "Invalid Business TIN: Must be exactly 10 numeric digits."


# GENERATE FUNCTIONS
def generate_tin_individual(): # type: () -> str
"""
Expand All @@ -58,7 +55,6 @@ def generate_tin_individual(): # type: () -> str
"""
return f"{randint(10**10, 10**11 - 1)}"


def generate_tin_business(): # type: () -> str
"""
Generates a valid Australian Business TIN.
Expand All @@ -68,7 +64,6 @@ def generate_tin_business(): # type: () -> str
"""
return f"{randint(10**9, 10**10 - 1)}"


# FORMAT FUNCTIONS
def format_tin(tin): # type: (str) -> str
"""
Expand All @@ -92,7 +87,6 @@ def format_tin(tin): # type: (str) -> str

return None


# USER INPUT VALIDATION
def is_valid_user_input(user_input): # type: (str) -> str
"""
Expand All @@ -114,29 +108,21 @@ def is_valid_user_input(user_input): # type: (str) -> str

return "Invalid TIN format."


# USAGE EXAMPLES
def example_usage():
# Generate examples
generated_individual_tin = generate_tin_individual()
print(
f"Generated Individual TIN: {generated_individual_tin} - Valid? {is_valid_tin_individual(generated_individual_tin)}"
)
print(f"Generated Individual TIN: {generated_individual_tin} - Valid? {is_valid_tin_individual(generated_individual_tin)}")
print(f"Formatted Individual TIN: {format_tin(generated_individual_tin)}")

generated_business_tin = generate_tin_business()
print(
f"Generated Business TIN: {generated_business_tin} - Valid? {is_valid_tin_business(generated_business_tin)}"
)
print(f"Generated Business TIN: {generated_business_tin} - Valid? {is_valid_tin_business(generated_business_tin)}")
print(f"Formatted Business TIN: {format_tin(generated_business_tin)}")

# User input
user_input = input(
"Enter an Individual or Business TIN (with or without symbols): "
)
user_input = input("Enter an Individual or Business TIN (with or without symbols): ")
print(is_valid_user_input(user_input))
print(f"Formatted TIN: {format_tin(user_input)}")


# Run example
example_usage()
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from random import randint
from random import randint, choice


# REMOVE SYMBOLS
Expand All @@ -15,14 +15,14 @@ def is_valid_tin(tin): # type: (str) -> str
Validate a Cabo Verde tin.
"""
tin = remove_symbols(tin)

if len(tin) != 9 or not tin.isdigit():
return "Invalid Cabo Verde tin: Must be exactly 9 digits."

# Calculate the control digit
expected_digit = calculate_control_digit(tin)
actual_digit = int(tin[-1])

if expected_digit == actual_digit:
return "Valid Cabo Verde tin"
return "Invalid Cabo Verde tin: Checksum mismatch."
Expand All @@ -35,22 +35,20 @@ def calculate_control_digit(tin): # type: (str) -> int
"""
# Weights for the calculation
weights = [2, 3, 4, 5, 6, 7, 8, 9]

# Multiply each digit of the tin by the respective weight
total_sum = sum(
int(digit) * weight for digit, weight in zip(tin[:8], weights)
)

total_sum = sum(int(digit) * weight for digit, weight in zip(tin[:8], weights))

# Calculate the remainder when divided by 11
remainder = total_sum % 11

# Calculate the control digit
control_digit = 11 - remainder
if control_digit == 10:
control_digit = 0
elif control_digit == 11:
control_digit = 1

return control_digit


Expand All @@ -61,14 +59,13 @@ def generate_tin(): # type: () -> str
"""
# Generate the first 8 digits (random)
first_8_digits = "".join(str(randint(0, 9)) for _ in range(8))

# Calculate the control digit
control_digit = calculate_control_digit(first_8_digits)

# Return the full tin with the control digit
return first_8_digits + str(control_digit)


# FORMAT tin
def format_tin(tin): # type: (str) -> str
"""
Expand All @@ -84,21 +81,16 @@ def format_tin(tin): # type: (str) -> str
def example_usage():
# Generate a valid Cabo Verde tin
tin = generate_tin()
print(
f"Generated Cabo Verde tin: {format_tin(tin)} - Valid? {is_valid_tin(tin)}"
)

print(f"Generated Cabo Verde tin: {format_tin(tin)} - Valid? {is_valid_tin(tin)}")

# User input
user_input = input(
"Enter your Cabo Verde tin (with or without formatting): "
)
user_input = input("Enter your Cabo Verde tin (with or without formatting): ")
print(is_valid_tin(user_input))
formatted_input = format_tin(user_input)
if formatted_input:
print(f"Formatted Cabo Verde tin: {formatted_input}")
else:
print("Invalid Cabo Verde tin format.")


# Run example
example_usage()
Loading

0 comments on commit 476350c

Please sign in to comment.