bchavez / Bogus

:card_index: A simple fake data generator for C#, F#, and VB.NET. Based on and ported from the famed faker.js.
Other
8.88k stars 506 forks source link

en_GB (UK) phone numbers are sometimes invalid #558

Open rd-waymark opened 3 months ago

rd-waymark commented 3 months ago

Bogus NuGet Package

35.6.0

.NET Version

NET 8.0.400

Visual Studio Version

Rider 2024.1.4

What operating system are you using?

Windows

What locale are you using with Bogus?

en_GB

Problem Description

Some phone numbers generated by Faker.Phone.PhoneNumber() when using the en_GB locale are invalid

LINQPad Example or Reproduction Steps

void Main() { while(true) { var faker = new Faker("en_GB");

    string phoneNumber = faker.Phone.PhoneNumber();

    PhoneNumberUtil? phoneNumberUtil = PhoneNumberUtil.GetInstance();
    PhoneNumbers.PhoneNumber? parsedPhoneNumber = phoneNumberUtil.Parse(phoneNumber, "GB");

    if (!phoneNumberUtil.IsValidNumberForRegion(parsedPhoneNumber, "GB"))
    {
        throw new Exception("Invalid phone number " + phoneNumber);
    }
}

}



### Expected Behavior

All UK phone numbers generated by `faker.Phone.PhoneNumber();` should be valid.

See Google's libPhoneNumber: https://github.com/google/libphonenumber/blob/master/resources/PhoneNumberMetadata.xml#L11093 

### Actual Behavior

`faker.Phone.PhoneNumber();` sometimes generates invalid UK phone numbers, such as:
- 016977 0004
- 0961 296 3851
- 016977 8550
- 0887 603 2383

### Known Workarounds

`Faker.Phone.PhoneNumber("07#########")` is a suitable workaround.

### Could you help with a pull-request?

No
Dan-613 commented 2 weeks ago

I can see that the 016977 numbers are incorrect. But what is wrong with the 0887 and 0971 numbers? They appear to be the correct number of digits.

Dan-613 commented 2 weeks ago

Ignore my previous comments. As Bogus imports its locales directly from faker.js, the issue is with the locale data that faker.js has.

See https://github.com/faker-js/faker/blob/next/src/locales/en_GB/phone_number/format/human.ts

I suggest opening an issue in the faker-js repo. Once resolved, it should get synced into Bogus according to the documentation here https://github.com/bchavez/Bogus/wiki/Creating-Locales