Python:如何生成随机电话号码?

2024-04-19 20:15:40 发布

您现在位置:Python中文网/ 问答频道 /正文

不是Making random phone number xxx-xxx-xxxx的副本

我的项目使用python-phonenumbersdjango-phonenumber-field进行电话号码验证。在项目中有大量的自定义验证规则,对于这些规则,像这样天真的方法是不够的:

>>> import functools
>>> import random
>>> a = functools.partial(random.randint, 0, 9)
>>> gen = lambda: "+{}-{}{}{}-{}{}{}-{}{}{}{}".format(a(), a(), a(), a(), a(), a(), a(), a(), a(), a(), a())
>>> gen()
'+2-758-702-0180'  # Obviously wrong
>>> gen()
'+1-911-555-0180'  # Obviously wrong, it has 911 in it

所以,如果不使用没有上限的暴力while循环,也不为这些琐碎的问题引入上限,那么有什么更好的方法来生成验证器本身接受的有效电话号码呢?

from phonenumber_field.validators import validate_international_phonenumber
from django.core.exceptions import ValidationError

def generate_valid_number():
    while True:  # While loops are not desired, even with an upper bound!
        try:
            number = gen()
            validate_international_phonenumber(number)
            return number
        except ValidationError:
            pass

Tags: 项目django方法importnumberfield规则电话号码