import hashlib from nanoid import generate import re def slugify_company_name(name, max_length=6): slug = re.sub(r'[^A-Z0-9]', '', name.upper()) return slug[:max_length] def short_hash(text, length=4): return hashlib.sha1(text.encode()).hexdigest().upper()[:length] def alphanumeric_to_digits(text): result = '' for c in text.upper(): if c.isdigit(): result += c elif c.isalpha(): result += str(ord(c) - 55) # A=10, B=11, ..., Z=35 return result def compute_check_digit(base_id): numeric_string = alphanumeric_to_digits(base_id) total = sum(int(digit) for digit in numeric_string) return str(total % 10) def generate_tenant_id(company_name,country, city, area): short_name = country + "-" + slugify_company_name(company_name, 5) + "-" + slugify_company_name(city,3) + slugify_company_name(area,3) hash_part = short_hash(short_name) nanoid_part = generate('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 5) base_id = f"{short_name}-{hash_part}-{nanoid_part}" return f"{base_id}"