2016-04-07 26 views
2

Değil Making random phone number xxx-xxx-xxxxPython: Rasgele bir telefon numarası nasıl oluşturulur?

Benim projenin yinelenen telefon numarası doğrulama için python-phonenumbers ve django-phonenumber-field kullanır. Yani

>>> 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 

, hiçbir üst sınırı vardır döngü sırasında kaba kuvvete başvurmadan ve bir tanıtma olmadan,: Proje kapsamında özel doğrulama kuralları engin listeleri, böyle naif bir yaklaşım yeterli olmayacaktır hangi içindir Bu tür önemsiz problemler için üst sınır, doğrulayıcı tarafından kabul edilen geçerli telefon numaraları üretmek için daha iyi yollar var mı?

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 
+5

related: [gösteren yalanlar Programcılar Telefon Numaraları Hakkında inanın] (https://github.com/googlei18n/libphonenumber/blob/master/FALSEHOODS.md) –

+0

bu testler içindir @PeterWood. Biraz felç iyidir. – Brian

cevap

3

Ben davidn this question verdiği cevap zaten Google'ın bir piton liman phonenumbers paketi kullanmak piton-phonenumbers

ben tavsiye ederim kullanıyorsanız özellikle çalışması gerektiğini düşünüyorum şimdi mobil taşıyıcıların veri kümesi içerir libphonenumber:

import phonenumbers 
from phonenumbers import carrier from 
phonenumbers.phonenumberutil import number_type 

number = "+49 176 1234 5678" 
carrier._is_mobile(number_type(phonenumbers.parse(number))) 

Bu işlemOlgu numarasındaki 10 getiri, bir cep telefonu numarasıdır, aksi takdirde False olur. numarasının geçerli bir uluslararası numara olması gerektiğini veya istisnasının atılacağını unutmayın. Ayrıca bir bölge ipucu verilen telefon numarası numaralarını ayrıştırmak için de telefon numaralarını kullanabilirsiniz.

İlgili konular