This commit is contained in:
2025-11-25 14:17:02 +08:00
parent 0eaa336b6a
commit 4953c488e1
2 changed files with 69 additions and 2 deletions

View File

@@ -1,3 +1,5 @@
# 0.1.6
- 信息变为本地生成
# 0.1.5 # 0.1.5
- 新增status字段 - 新增status字段
# 0.1.4 # 0.1.4

View File

@@ -386,12 +386,77 @@ def generate_canada_info(province: str, city: Optional[str] = None, max_attempts
def get_random_canada_info(province, city) -> Dict[str, str]: def get_random_canada_info(province, city) -> Dict[str, str]:
""" """
随机生成加拿大个人与地址信息,省份随机选择,城市随机选择 本地生成加拿大个人与地址信息(不依赖外部网络)
参数:
province (str): 省份(如 "Alberta""AB"
city (str | None): 城市(如 "Calgary"),不传则按省份随机
返回值: 返回值:
dict: 包含 Firstname、Lastname、全名、生日、街道地址、城市、电话、邮编、州全称 dict: 包含 Firstname、Lastname、全名、生日、街道地址、城市、电话、邮编、州全称
""" """
return generate_canada_info(province, city) prov_abbr = _normalize_province(province)
_, _, chosen_city = _pick_coords(prov_abbr, city)
firstname, lastname = _random_name()
full_name = f"{firstname} {lastname}"
birthday = _random_birthday()
phone = _random_phone_city(prov_abbr, city or chosen_city)
def _random_street() -> str:
"""
生成本地街道地址
返回值:
str: 形如 '123 Maple Ave' 的地址
"""
house = random.randint(10, 9999)
street_roots = [
"Maple", "Oak", "Pine", "Cedar", "Elm", "Birch", "Willow", "Spruce", "Ash",
"River", "Lake", "Hill", "Queen", "King", "Main", "Victoria", "Wellington",
"Church", "College", "Centre"
]
suffixes = ["St", "Ave", "Rd", "Blvd", "Dr", "Ct", "Pl", "Ln", "Way", "Terrace"]
return f"{house} {random.choice(street_roots)} {random.choice(suffixes)}"
def _random_postal(p_abbr: str) -> str:
"""
生成加拿大邮编A1A 1A1首字母符合省份规范
参数:
p_abbr (str): 省份缩写
返回值:
str: 邮编
"""
allowed_letters = "ABCEGHJKLMNPRSTVXY"
prefixes = POSTAL_PREFIXES.get(p_abbr) or set(allowed_letters)
first_letter = random.choice(sorted(list(prefixes)))
def L() -> str:
return random.choice(allowed_letters)
def D() -> str:
return str(random.randint(0, 9))
return f"{first_letter}{D()}{L()} {D()}{L()}{D()}"
address_str = _random_street()
city_name = city or chosen_city
postcode = _random_postal(prov_abbr)
province_full = next((k for k, v in CA_PROVINCE_ABBR.items() if v == prov_abbr), prov_abbr)
return {
"firstname": firstname,
"lastname": lastname,
"full_name": full_name,
"birthday": birthday,
"address_str": address_str,
"city_name": city_name,
"phone": phone,
"postcode": postcode,
"province": province_full,
}
def main() -> None: def main() -> None: