diff --git a/doc/default/id_number.md b/doc/default/id_number.md index 89216c0279..b53bfe52ff 100644 --- a/doc/default/id_number.md +++ b/doc/default/id_number.md @@ -50,3 +50,24 @@ Faker::IdNumber.danish_id_number(gender: :female) #=> "050390-9980" # Generate a valid French Social Security number (INSEE number) Faker::IdNumber.french_insee_number #=> "22510589696868" ``` + +## ID Number and Locales + +Besides the default ID numbers, faker supports localized `.valid` and `.invalid` values: + +```ruby +Faker::Config.locale = 'fr-FR' +Faker::IdNumber.valid #=> "22510589696868" +``` + +Locales with specific intricacies are as such: + +### en-GB + +When the locale is set to British English, unformatted [National Insurance](https://www.gov.uk/national-insurance/your-national-insurance-number) numbers are generated: + +```ruby +Faker::Config.locale = 'en-GB' +Faker::IdNumber.valid #=> "AJ405924A" +Faker::IdNumber.invalid #=> "BG316764W" + diff --git a/lib/locales/en-GB.yml b/lib/locales/en-GB.yml index 0a50f78714..b8aa870dc0 100644 --- a/lib/locales/en-GB.yml +++ b/lib/locales/en-GB.yml @@ -85,6 +85,9 @@ en-GB: - Northern Ireland default_country_code: - GB + id_number: + valid: '/[A-CEGHJ-NOPR-TW-Z][ACEHJLMOPRSW][0-9]{6}[ABCD]/' + invalid: '/(BG|GB|NK|KN|TN|NT|ZZ)[0-9]{6}[E-Z]{1}/' internet: domain_suffix: - co.uk diff --git a/test/test_en_gb_locale.rb b/test/test_en_gb_locale.rb index d12cf30cb9..8a921b0c86 100644 --- a/test/test_en_gb_locale.rb +++ b/test/test_en_gb_locale.rb @@ -69,4 +69,18 @@ def test_en_gb_postcode_outcode_is_valid assert_match(/^[A-PR-UWYZ][A-HK-Y0-9]/, outcode) assert_match(/\w{1,2}\d{1,2}|\w\d[ABCDEFGHJKPSTUW]|\w\w\d[ABEHMNPRVWXY]/, outcode) end + + def test_en_gb_id_number_valid + id_code = Faker::IdNumber.valid + + assert_equal(9, id_code.length) + assert_match(/^[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z][0-9]{6}[A-DFM]$/, id_code) + end + + def test_en_gb_id_number_invalid + id_code = Faker::IdNumber.invalid + + assert_equal(9, id_code.length) + assert_not_match(/^[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z][0-9]{6}[A-DFM]$/, id_code) + end end