0.1.6
This commit is contained in:
@@ -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]:
|
||||
"""
|
||||
随机生成加拿大个人与地址信息,省份随机选择,城市随机选择
|
||||
本地生成加拿大个人与地址信息(不依赖外部网络)
|
||||
|
||||
参数:
|
||||
province (str): 省份(如 "Alberta" 或 "AB")
|
||||
city (str | None): 城市(如 "Calgary"),不传则按省份随机
|
||||
|
||||
返回值:
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user