如何在Ruby中随机生成有效的E164格式的电话号码?

时间:2017-10-16 19:04:30

标签: ruby-on-rails ruby phone-number libphonenumber

对于我的Rails应用的自动测试,我想生成随机电话号码。

  • 与我系统中的所有电话号码一样,这些电话号码必须为E164格式。
  • 他们必须是有效的电话号码。 (例如根据https://github.com/googlei18n/libphonenumber)。
  • 理想情况下包括非美国号码。

我该如何处理?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

发现了这个问题,没有找到答案(comic reference)。

Indeed Faker给出了有时无效的随机数。检查了其他语言中的其他lib的作用(例如python),采用的一种解决方案是用Phony强行使用Faker(这里我也使用PhonyRails,因为我使用的是国家代码的默认区域设置PhohyRails)

def test_phone_number(locale=nil)

    # Magic to get your own app locale

    Faker::Config.locale = locale

    if [:fi, :de, ...].include?(locale)
        # faker locales that allow cell_phone call
        Faker::PhoneNumber.cell_phone
    else
        Faker::PhoneNumber.phone_number
    end
end

def valid_phone_number!
     number = test_phone_number
     attempts = 0

     while !Phony.plausible?(PhonyRails.normalize_number(number))
         number = test_phone_number
         attempts += 1
         if attempts > 100
             raise "Cannot generate valid phone number" 
         end
     end
     number
end