任何国家的随机电话号码生成器

时间:2019-04-10 13:44:35

标签: java libphonenumber

我正在尝试根据国家/地区列表创建有关电话号码的综合数据。

我发现Google的libphonenumber Java库带有Python,C ++等端口。

使用此库是否可以从国家/地区列表中生成有效个随机电话号码?

使用我编写的这段代码,我正在使用它们的getExampleNumber函数,但每次都会生成相同的数字:

import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
import com.google.i18n.phonenumbers.NumberParseException;

public class Driver {
    public static void main(String[] args) {
       // Prints "Hello, World" in the terminal window.
       for (int i=0;i<10;i++)
       {
          System.out.println(Generator());
       }
    }


    public static PhoneNumber  Generator() 
    {
       String regionCode = new String("GB");
       PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
       PhoneNumber exampleNumber =phoneNumberUtil.getExampleNumber(regionCode);
       return exampleNumber;
    }

}

3 个答案:

答案 0 :(得分:1)

此库不会为您提供随机数,无论您运行代码多少次,总会得到:

Country Code: 44 National Number: 1212345678

您可以看一下他们的github项目:

https://github.com/googlei18n/libphonenumber/

您将在此文件夹中看到很多原始文件:

https://github.com/googlei18n/libphonenumber/tree/master/java/libphonenumber/src/com/google/i18n/phonenumbers/data

从这些文件中可以获取该编号,因此将其硬编码在其中。没有办法随机获得它。

答案 1 :(得分:1)

您可以使用两个库来执行此操作:

这是Google的一个库,可为您提供电话号码的正则表达式格式: https://github.com/googlei18n/libphonenumber/

基于正则表达式,您可以使用Generex构建与正则表达式匹配的字符串 https://github.com/mifmif/Generex

答案 2 :(得分:1)

最好的方法是使用该库具有的REGEX,但这是很多工作。

由于getExampleNumber的函数将返回完全相同的值,因此始终可以使用它来随机化(或迭代)其中的数字。

这是一个示例(示例here),该示例如何获取每个受支持区域的10个随机手机号码:

fun getProfileInfo(): Pair<LiveData<String>, LiveData<String>> {
  // ...
  return Pair(liveDataName, liveDataImage)
}

渐变依赖项:

class MainActivity : AppCompatActivity() {
    @WorkerThread
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val phoneNumbersToRandomize = 10
        var regionsThatFoundMobilePhonesFor = 0
        if (savedInstanceState == null)
            thread {
                val phoneNumberUtil = PhoneNumberUtil.getInstance()
                val startTime = System.currentTimeMillis()
                val supportedRegions = phoneNumberUtil.supportedRegions
                for (region in supportedRegions) {
                    val validPhoneNumbers = HashSet<String>()
                    val exampleNumber = phoneNumberUtil.getExampleNumberForType(region, PhoneNumberUtil.PhoneNumberType.MOBILE)
                    if (exampleNumber == null) {
                        Log.w("AppLog", "region:$region no exampleNumber")
                        continue
                    }
                    Log.d("AppLog", "region:$region exampleNumber:${phoneNumberUtil.format(exampleNumber, PhoneNumberUtil.PhoneNumberFormat.E164)}")
                    val countryCode = phoneNumberUtil.getCountryCodeForRegion(region)
                    val nationalSignificantNumber = phoneNumberUtil.getNationalSignificantNumber(exampleNumber)
                    //                    Log.d("AppLog", "finding $phoneNumbersToRandomize random mobile phone numbers for $region example phone number:" +
                    //                            phoneNumberUtil.format(exampleNumber, PhoneNumberUtil.PhoneNumberFormat.E164) + " countryCode:$countryCode nationalSignificantNumber:$nationalSignificantNumber ")
                    val randomDigitsLength = nationalSignificantNumber.length
                    while (validPhoneNumbers.size < phoneNumbersToRandomize) {
                        val inputPhone = "+$countryCode${getRandomStringOfDigits(randomDigitsLength)}"
                        if (validPhoneNumbers.contains(inputPhone))
                            continue
                        val phoneNumber = phoneNumberUtil.parse(inputPhone, region)
                        val nationalSignificantNumberFromGeneratedNumber = phoneNumberUtil.getNationalSignificantNumber(phoneNumber)
                        if (nationalSignificantNumberFromGeneratedNumber.length != randomDigitsLength)
                            continue
                        val isValidMobilePhoneNumber = phoneNumberUtil.isValidNumberForRegion(phoneNumber, region)
                                && phoneNumberUtil.isPossibleNumberForType(phoneNumber, PhoneNumberUtil.PhoneNumberType.MOBILE)
                        if (isValidMobilePhoneNumber) {
                            validPhoneNumbers.add(inputPhone)
                        }
                    }
                    ++regionsThatFoundMobilePhonesFor
                }
                Log.d("AppLog", "done regionsThatFoundMobilePhonesFor:$regionsThatFoundMobilePhonesFor out of ${supportedRegions.size}" +
                        "timeTaken:${System.currentTimeMillis() - startTime}ms")
            }

    }

    companion object {
        private fun getRandomStringOfDigits(numberOfDigitsToGenerate: Int): String {
            val sb = StringBuilder(numberOfDigitsToGenerate)
            for (i in 0 until numberOfDigitsToGenerate)
                sb.append(Random.nextInt(10).toString())
            return sb.toString()
        }
    }
}