faker 2.15.1 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +848 -34
- data/README.md +225 -103
- data/lib/faker/blockchain/aeternity.rb +1 -1
- data/lib/faker/blockchain/bitcoin.rb +2 -2
- data/lib/faker/blockchain/ethereum.rb +1 -1
- data/lib/faker/blockchain/tezos.rb +31 -3
- data/lib/faker/books/dune.rb +2 -10
- data/lib/faker/books/lovecraft.rb +9 -41
- data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
- data/lib/faker/creature/bird.rb +203 -0
- data/lib/faker/default/address.rb +7 -27
- data/lib/faker/default/alphanumeric.rb +2 -8
- data/lib/faker/default/app.rb +1 -10
- data/lib/faker/default/avatar.rb +1 -12
- data/lib/faker/default/bank.rb +25 -17
- data/lib/faker/default/barcode.rb +33 -22
- data/lib/faker/default/boolean.rb +1 -4
- data/lib/faker/default/cannabis.rb +10 -0
- data/lib/faker/default/chile_rut.rb +25 -25
- data/lib/faker/default/chuck_norris.rb +1 -0
- data/lib/faker/default/code.rb +71 -42
- data/lib/faker/default/color.rb +77 -6
- data/lib/faker/default/commerce.rb +31 -17
- data/lib/faker/default/company.rb +137 -22
- data/lib/faker/default/crypto.rb +26 -4
- data/lib/faker/default/crypto_coin.rb +3 -15
- data/lib/faker/default/date.rb +65 -42
- data/lib/faker/default/demographic.rb +1 -5
- data/lib/faker/default/driving_licence.rb +20 -18
- data/lib/faker/default/drone.rb +1 -1
- data/lib/faker/default/educator.rb +13 -0
- data/lib/faker/default/emotion.rb +33 -0
- data/lib/faker/default/file.rb +5 -22
- data/lib/faker/default/finance.rb +30 -7
- data/lib/faker/default/food.rb +27 -1
- data/lib/faker/default/hipster.rb +8 -48
- data/lib/faker/default/hobby.rb +22 -0
- data/lib/faker/default/html.rb +230 -0
- data/lib/faker/default/id_number.rb +175 -27
- data/lib/faker/default/internet.rb +333 -114
- data/lib/faker/default/invoice.rb +4 -17
- data/lib/faker/default/json.rb +4 -21
- data/lib/faker/default/lorem.rb +175 -73
- data/lib/faker/default/lorem_flickr.rb +4 -37
- data/lib/faker/default/markdown.rb +10 -13
- data/lib/faker/default/marketing.rb +1 -1
- data/lib/faker/default/measurement.rb +16 -48
- data/lib/faker/default/name.rb +1 -5
- data/lib/faker/default/nation.rb +0 -3
- data/lib/faker/default/{nhs.rb → national_health_service.rb} +9 -8
- data/lib/faker/default/number.rb +33 -61
- data/lib/faker/default/omniauth.rb +55 -52
- data/lib/faker/default/phone_number.rb +36 -21
- data/lib/faker/default/placeholdit.rb +10 -20
- data/lib/faker/default/relationship.rb +1 -5
- data/lib/faker/default/religion.rb +6 -0
- data/lib/faker/default/science.rb +108 -0
- data/lib/faker/default/source.rb +3 -16
- data/lib/faker/default/south_africa.rb +3 -3
- data/lib/faker/default/string.rb +1 -7
- data/lib/faker/default/stripe.rb +4 -20
- data/lib/faker/default/tea.rb +41 -0
- data/lib/faker/{music/show.rb → default/theater.rb} +11 -8
- data/lib/faker/default/time.rb +4 -34
- data/lib/faker/default/twitter.rb +7 -23
- data/lib/faker/default/types.rb +12 -34
- data/lib/faker/default/vehicle.rb +44 -54
- data/lib/faker/default/vulnerability_identifier.rb +23 -0
- data/lib/faker/default/world_cup.rb +2 -11
- data/lib/faker/games/clash_of_clans.rb +1 -1
- data/lib/faker/games/dnd.rb +49 -7
- data/lib/faker/games/dota.rb +14 -5
- data/lib/faker/games/final_fantasy_xiv.rb +73 -0
- data/lib/faker/games/minecraft.rb +1 -1
- data/lib/faker/games/myst.rb +1 -1
- data/lib/faker/games/tarkov.rb +205 -0
- data/lib/faker/games/touhou.rb +75 -0
- data/lib/faker/games/witcher.rb +39 -0
- data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
- data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +51 -0
- data/lib/faker/japanese_media/kamen_rider.rb +102 -0
- data/lib/faker/japanese_media/one_piece.rb +1 -1
- data/lib/faker/locations/australia.rb +52 -0
- data/lib/faker/movies/avatar.rb +49 -0
- data/lib/faker/movies/hackers.rb +48 -0
- data/lib/faker/movies/star_wars.rb +73 -5
- data/lib/faker/movies/{room.rb → the_room.rb} +4 -4
- data/lib/faker/movies/tron.rb +161 -0
- data/lib/faker/music/hiphop.rb +3 -3
- data/lib/faker/music/music.rb +12 -0
- data/lib/faker/music/rock_band.rb +12 -0
- data/lib/faker/music/smashing_pumpkins.rb +64 -0
- data/lib/faker/quotes/quote.rb +13 -0
- data/lib/faker/quotes/rajnikanth.rb +1 -0
- data/lib/faker/quotes/shakespeare.rb +34 -0
- data/lib/faker/religion/bible.rb +50 -0
- data/lib/faker/sports/chess.rb +90 -0
- data/lib/faker/sports/mountaineering.rb +22 -0
- data/lib/faker/sports/sport.rb +116 -0
- data/lib/faker/travel/airport.rb +43 -0
- data/lib/faker/travel/train_station.rb +54 -0
- data/lib/faker/tv_shows/archer.rb +51 -0
- data/lib/faker/tv_shows/big_bang_theory.rb +1 -1
- data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
- data/lib/faker/tv_shows/michael_scott.rb +0 -3
- data/lib/faker/tv_shows/south_park.rb +15 -0
- data/lib/faker/tv_shows/spongebob.rb +50 -0
- data/lib/faker/tv_shows/suits.rb +1 -1
- data/lib/faker/tv_shows/supernatural.rb +48 -0
- data/lib/faker/tv_shows/the_office.rb +37 -0
- data/lib/faker/version.rb +2 -2
- data/lib/faker.rb +26 -67
- data/lib/helpers/base58.rb +1 -1
- data/lib/helpers/deprecator.rb +53 -0
- data/lib/helpers/positional_generator.rb +480 -0
- data/lib/helpers/unique_generator.rb +13 -14
- data/lib/locales/README.md +18 -2
- data/lib/locales/ar.yml +6 -1
- data/lib/locales/bg.yml +1 -2
- data/lib/locales/da-DK.yml +529 -35
- data/lib/locales/de-AT.yml +3487 -27
- data/lib/locales/de-CH.yml +4328 -12
- data/lib/locales/de.yml +7185 -99
- data/lib/locales/ee.yml +0 -1
- data/lib/locales/en/address.yml +1826 -562
- data/lib/locales/en/airport.yml +381 -0
- data/lib/locales/en/animal.yml +1 -1
- data/lib/locales/en/archer.yml +75 -0
- data/lib/locales/en/australia.yml +108 -0
- data/lib/locales/en/avatar.yml +31 -0
- data/lib/locales/en/bank.yml +1 -1
- data/lib/locales/en/bible.yml +90 -0
- data/lib/locales/en/bird.yml +1281 -0
- data/lib/locales/en/book.yml +487 -3
- data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
- data/lib/locales/en/cat.yml +1 -1
- data/lib/locales/en/chess.yml +103 -0
- data/lib/locales/en/coffee.yml +1 -1
- data/lib/locales/en/commerce.yml +17 -0
- data/lib/locales/en/community.yml +17 -17
- data/lib/locales/en/company.yml +1 -0
- data/lib/locales/en/computer.yml +23 -4
- data/lib/locales/en/cowboy_bebop.yml +163 -0
- data/lib/locales/en/device.yml +112 -4
- data/lib/locales/en/dnd.yml +186 -1
- data/lib/locales/en/dog.yml +262 -7
- data/lib/locales/en/dota.yml +173 -0
- data/lib/locales/en/dune.yml +266 -397
- data/lib/locales/en/educator.yml +6 -0
- data/lib/locales/en/emotion.yml +480 -0
- data/lib/locales/en/file.yml +9 -1
- data/lib/locales/en/final_fantasy_xiv.yml +754 -0
- data/lib/locales/en/finance.yml +27 -4
- data/lib/locales/en/food.yml +1067 -10
- data/lib/locales/en/football.yml +3 -3
- data/lib/locales/en/fullmetal_alchemist_brotherhood.yml +78 -0
- data/lib/locales/en/game.yml +11 -0
- data/lib/locales/en/hackers.yml +53 -0
- data/lib/locales/en/harry_potter.yml +1 -1
- data/lib/locales/en/heroes.yml +2 -2
- data/lib/locales/en/hobby.yml +171 -0
- data/lib/locales/en/horse.yml +2 -2
- data/lib/locales/en/id_number.yml +1 -1
- data/lib/locales/en/internet.yml +136 -3
- data/lib/locales/en/kamen_rider.yml +452 -0
- data/lib/locales/en/kpop.yml +7 -7
- data/lib/locales/en/lebowski.yml +1 -1
- data/lib/locales/en/lovecraft.yml +76 -6
- data/lib/locales/en/minecraft.yml +4 -4
- data/lib/locales/en/mitch_hedberg.yml +46 -0
- data/lib/locales/en/mountain.yml +14 -1
- data/lib/locales/en/mountaineering.yml +14 -0
- data/lib/locales/en/movie.yml +2 -1
- data/lib/locales/en/music.yml +152 -142
- data/lib/locales/en/naruto.yml +2 -3
- data/lib/locales/en/one_piece.yml +1 -1
- data/lib/locales/en/opera.yml +2 -2
- data/lib/locales/en/overwatch.yml +5 -7
- data/lib/locales/en/phone_number.yml +78 -3
- data/lib/locales/en/rock_band.yml +1 -0
- data/lib/locales/en/science.yml +481 -3
- data/lib/locales/en/shakespeare.yml +21 -24
- data/lib/locales/en/smashing_pumpkins.yml +382 -0
- data/lib/locales/en/source.yml +5 -0
- data/lib/locales/en/south_park.yml +360 -2
- data/lib/locales/en/space.yml +1 -1
- data/lib/locales/en/spongebob.yml +489 -0
- data/lib/locales/en/sport.yml +130 -0
- data/lib/locales/en/star_wars.yml +1 -1
- data/lib/locales/en/stranger_thing.yml +1 -1
- data/lib/locales/en/super_smash_bros.yml +7 -2
- data/lib/locales/en/supernatural.yml +141 -0
- data/lib/locales/en/tarkov.yml +593 -0
- data/lib/locales/en/tea.yml +172 -0
- data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
- data/lib/locales/en/the_office.yml +86 -0
- data/lib/locales/en/{room.yml → the_room.yml} +1 -1
- data/lib/locales/en/{show.yml → theater.yml} +1 -1
- data/lib/locales/en/touhou.yml +839 -0
- data/lib/locales/en/train_station.yml +280 -0
- data/lib/locales/en/tron.yml +227 -0
- data/lib/locales/en/vehicle.yml +2809 -75
- data/lib/locales/en/witcher.yml +37 -0
- data/lib/locales/en-AU.yml +718 -47
- data/lib/locales/en-CA.yml +373 -18
- data/lib/locales/en-GB.yml +116 -8
- data/lib/locales/en-IND.yml +1259 -17
- data/lib/locales/en-KE.yml +212 -0
- data/lib/locales/en-MS.yml +364 -17
- data/lib/locales/en-NEP.yml +212 -38
- data/lib/locales/en-NG.yml +1 -0
- data/lib/locales/en-NZ.yml +1153 -123
- data/lib/locales/en-PAK.yml +369 -10
- data/lib/locales/en-SG.yml +581 -16
- data/lib/locales/en-UG.yml +1 -0
- data/lib/locales/en-US.yml +6914 -74
- data/lib/locales/en-ZA.yml +1 -1
- data/lib/locales/en-au-ocker.yml +266 -22
- data/lib/locales/es-AR.yml +4570 -0
- data/lib/locales/es-MX.yml +1 -2
- data/lib/locales/es.yml +2 -3
- data/lib/locales/fi-FI.yml +3 -1
- data/lib/locales/fr/address.yml +20 -0
- data/lib/locales/fr/adjective.yml +266 -0
- data/lib/locales/fr/ancient.yml +141 -0
- data/lib/locales/fr/animal.yml +5 -0
- data/lib/locales/fr/appliance.yml +4 -0
- data/lib/locales/fr/book.yml +7 -0
- data/lib/locales/fr/color.yml +4 -0
- data/lib/locales/fr/company.yml +17 -0
- data/lib/locales/fr/compass.yml +23 -0
- data/lib/locales/fr/demographic.yml +4 -0
- data/lib/locales/fr/gender.yml +6 -0
- data/lib/locales/fr/internet.yml +4 -0
- data/lib/locales/fr/lorem.yml +5 -0
- data/lib/locales/fr/measurement.yml +7 -0
- data/lib/locales/fr/name.yml +22 -0
- data/lib/locales/fr/phone_number.yml +7 -0
- data/lib/locales/fr/pokemon.yml +7 -0
- data/lib/locales/fr-CA.yml +2733 -44
- data/lib/locales/fr-CH.yml +1 -2
- data/lib/locales/fr.yml +2 -118
- data/lib/locales/hy.yml +3624 -119
- data/lib/locales/id.yml +839 -12
- data/lib/locales/it.yml +1304 -32
- data/lib/locales/ja/README.md +13 -0
- data/lib/locales/ja/address.yml +120539 -0
- data/lib/locales/ja/adjective.yml +148 -0
- data/lib/locales/ja/ancient.yml +4 -0
- data/lib/locales/ja/animal.yml +5 -0
- data/lib/locales/ja/bank.yml +4 -0
- data/lib/locales/ja/book.yml +7 -0
- data/lib/locales/ja/cat.yml +5 -0
- data/lib/locales/ja/coffee.yml +4 -0
- data/lib/locales/ja/color.yml +4 -0
- data/lib/locales/ja/commerce.yml +11 -0
- data/lib/locales/ja/company.yml +8 -0
- data/lib/locales/ja/dog.yml +6 -0
- data/lib/locales/ja/emotion.yml +51 -0
- data/lib/locales/ja/food.yml +4 -0
- data/lib/locales/ja/football.yml +115 -0
- data/lib/locales/ja/gender.yml +4 -0
- data/lib/locales/ja/lorem.yml +9 -0
- data/lib/locales/ja/name.yml +13 -0
- data/lib/locales/ja/naruto.yml +230 -0
- data/lib/locales/ja/overwatch.yml +5 -0
- data/lib/locales/ja/phone_number.yml +7 -0
- data/lib/locales/ja/pokemon.yml +7 -0
- data/lib/locales/ja/relationship.yml +10 -0
- data/lib/locales/ja/restaurant.yml +11 -0
- data/lib/locales/ja/space.yml +5 -0
- data/lib/locales/ja/sport.yml +130 -0
- data/lib/locales/ja/studio_ghibli.yml +112 -0
- data/lib/locales/ja/subscription.yml +8 -0
- data/lib/locales/ja/super_mario.yml +9 -0
- data/lib/locales/ja/super_smash_bros.yml +8 -0
- data/lib/locales/ja/touhou.yml +466 -0
- data/lib/locales/ja/university.yml +9 -0
- data/lib/locales/ja/zelda.yml +5 -0
- data/lib/locales/ko.yml +1361 -20
- data/lib/locales/lt.yml +315 -0
- data/lib/locales/lv.yml +1 -2
- data/lib/locales/mi-NZ.yml +283 -0
- data/lib/locales/nb-NO.yml +518 -29
- data/lib/locales/nl.yml +1 -1
- data/lib/locales/pl.yml +1 -2
- data/lib/locales/pt-BR.yml +8157 -660
- data/lib/locales/pt.yml +844 -45
- data/lib/locales/ru.yml +1355 -32
- data/lib/locales/sk.yml +4410 -43
- data/lib/locales/sv.yml +100 -0
- data/lib/locales/th.yml +76 -76
- data/lib/locales/tr.yml +1 -2
- data/lib/locales/uk.yml +1808 -44
- data/lib/locales/vi.yml +1 -0
- data/lib/locales/zh-CN/bank.yml +17 -0
- data/lib/locales/zh-CN.yml +1 -0
- data/lib/locales/zh-TW.yml +1 -0
- metadata +134 -133
- data/History.md +0 -176
- data/lib/faker/default/fillmurray.rb +0 -45
- data/lib/faker/default/lorem_pixel.rb +0 -69
- data/lib/locales/ja.yml +0 -105
- /data/lib/faker/default/{faker_adjective.rb → adjective.rb} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Faker
|
|
4
|
-
class
|
|
4
|
+
class IdNumber < Base
|
|
5
5
|
CHECKS = 'TRWAGMYFPDXBNJZSQVHLCKE'
|
|
6
6
|
INVALID_SSN = [
|
|
7
7
|
/0{3}-\d{2}-\d{4}/,
|
|
@@ -25,7 +25,7 @@ module Faker
|
|
|
25
25
|
# @return [String]
|
|
26
26
|
#
|
|
27
27
|
# @example
|
|
28
|
-
# Faker::
|
|
28
|
+
# Faker::IdNumber.valid #=> "552-56-3593"
|
|
29
29
|
#
|
|
30
30
|
# @faker.version 1.6.0
|
|
31
31
|
def valid
|
|
@@ -38,7 +38,7 @@ module Faker
|
|
|
38
38
|
# @return [String]
|
|
39
39
|
#
|
|
40
40
|
# @example
|
|
41
|
-
# Faker::
|
|
41
|
+
# Faker::IdNumber.invalid #=> "311-72-0000"
|
|
42
42
|
#
|
|
43
43
|
# @faker.version 1.6.0
|
|
44
44
|
def invalid
|
|
@@ -46,9 +46,23 @@ module Faker
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def ssn_valid
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
generate(:string) do |g|
|
|
50
|
+
g.computed(name: :first) do
|
|
51
|
+
range = [1..665, 667..899].sample(random: Faker::Config.random)
|
|
52
|
+
n = Faker::Base.rand(range)
|
|
53
|
+
format('%03d', n)
|
|
54
|
+
end
|
|
55
|
+
g.lit('-')
|
|
56
|
+
g.computed(name: :second) do
|
|
57
|
+
n = Faker::Base.rand(1..99)
|
|
58
|
+
format('%02d', n)
|
|
59
|
+
end
|
|
60
|
+
g.lit('-')
|
|
61
|
+
g.computed(name: :third) do
|
|
62
|
+
n = Faker::Base.rand(1..9999)
|
|
63
|
+
format('%04d', n)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
52
66
|
end
|
|
53
67
|
|
|
54
68
|
##
|
|
@@ -57,7 +71,7 @@ module Faker
|
|
|
57
71
|
# @return [String]
|
|
58
72
|
#
|
|
59
73
|
# @example
|
|
60
|
-
# Faker::
|
|
74
|
+
# Faker::IdNumber.spanish_citizen_number #=> "53290236-H"
|
|
61
75
|
#
|
|
62
76
|
# @faker.version 1.9.0
|
|
63
77
|
def spanish_citizen_number
|
|
@@ -73,7 +87,7 @@ module Faker
|
|
|
73
87
|
# @return [String]
|
|
74
88
|
#
|
|
75
89
|
# @example
|
|
76
|
-
# Faker::
|
|
90
|
+
# Faker::IdNumber.spanish_foreign_citizen_number #=> "Z-1600870-Y"
|
|
77
91
|
#
|
|
78
92
|
# @faker.version 1.9.0
|
|
79
93
|
def spanish_foreign_citizen_number
|
|
@@ -92,8 +106,8 @@ module Faker
|
|
|
92
106
|
# @return [String]
|
|
93
107
|
#
|
|
94
108
|
# @example
|
|
95
|
-
# Faker::
|
|
96
|
-
# Faker::
|
|
109
|
+
# Faker::IdNumber.south_african_id_number #=> "8105128870184"
|
|
110
|
+
# Faker::IdNumber.valid_south_african_id_number #=> "8105128870184"
|
|
97
111
|
#
|
|
98
112
|
# @faker.version 1.9.2
|
|
99
113
|
def valid_south_african_id_number
|
|
@@ -115,7 +129,7 @@ module Faker
|
|
|
115
129
|
# @return [String]
|
|
116
130
|
#
|
|
117
131
|
# @example
|
|
118
|
-
# Faker::
|
|
132
|
+
# Faker::IdNumber.invalid_south_african_id_number #=> "1642972065088"
|
|
119
133
|
#
|
|
120
134
|
# @faker.version 1.9.2
|
|
121
135
|
def invalid_south_african_id_number
|
|
@@ -142,15 +156,11 @@ module Faker
|
|
|
142
156
|
# @return [String]
|
|
143
157
|
#
|
|
144
158
|
# @example
|
|
145
|
-
# Faker::
|
|
146
|
-
# Faker::
|
|
159
|
+
# Faker::IdNumber.brazilian_citizen_number #=> "53540542221"
|
|
160
|
+
# Faker::IdNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21"
|
|
147
161
|
#
|
|
148
162
|
# @faker.version 1.9.2
|
|
149
|
-
def brazilian_citizen_number(
|
|
150
|
-
warn_for_deprecated_arguments do |keywords|
|
|
151
|
-
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
152
|
-
end
|
|
153
|
-
|
|
163
|
+
def brazilian_citizen_number(formatted: false)
|
|
154
164
|
digits = Faker::Number.leading_zero_number(digits: 9) until digits&.match(/(\d)((?!\1)\d)+/)
|
|
155
165
|
first_digit = brazilian_citizen_number_checksum_digit(digits)
|
|
156
166
|
second_digit = brazilian_citizen_number_checksum_digit(digits + first_digit)
|
|
@@ -167,15 +177,11 @@ module Faker
|
|
|
167
177
|
# @return [String]
|
|
168
178
|
#
|
|
169
179
|
# @example
|
|
170
|
-
# Faker::
|
|
171
|
-
# Faker::
|
|
180
|
+
# Faker::IdNumber.brazilian_id #=> "493054029"
|
|
181
|
+
# Faker::IdNumber.brazilian_id(formatted: true) #=> "49.305.402-9"
|
|
172
182
|
#
|
|
173
183
|
# @faker.version 2.1.2
|
|
174
|
-
def brazilian_id(
|
|
175
|
-
warn_for_deprecated_arguments do |keywords|
|
|
176
|
-
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
177
|
-
end
|
|
178
|
-
|
|
184
|
+
def brazilian_id(formatted: false)
|
|
179
185
|
digits = Faker::Number.between(to: BRAZILIAN_ID_FROM, from: BRAZILIAN_ID_TO).to_s
|
|
180
186
|
check_digit = brazilian_id_checksum_digit(digits)
|
|
181
187
|
number = [digits, check_digit].join
|
|
@@ -190,7 +196,7 @@ module Faker
|
|
|
190
196
|
# @return [String]
|
|
191
197
|
#
|
|
192
198
|
# @example
|
|
193
|
-
# Faker::
|
|
199
|
+
# Faker::IdNumber.chilean_id #=> "15620613-K"
|
|
194
200
|
#
|
|
195
201
|
# @faker.version 2.1.2
|
|
196
202
|
def chilean_id
|
|
@@ -200,8 +206,108 @@ module Faker
|
|
|
200
206
|
"#{digits}-#{verification_code}"
|
|
201
207
|
end
|
|
202
208
|
|
|
209
|
+
##
|
|
210
|
+
# Produces a random Croatian ID number (OIB).
|
|
211
|
+
#
|
|
212
|
+
# @param international [Boolean] Specifies whether to add international prefix.
|
|
213
|
+
# @return [String]
|
|
214
|
+
#
|
|
215
|
+
# @example
|
|
216
|
+
# Faker::IdNumber.croatian_id #=> "88467617508"
|
|
217
|
+
# Faker::IdNumber.croatian_id(international: true) #=> "HR88467617508"
|
|
218
|
+
#
|
|
219
|
+
# @faker.version next
|
|
220
|
+
def croatian_id(international: false)
|
|
221
|
+
prefix = international ? 'HR' : ''
|
|
222
|
+
digits = Faker::Number.number(digits: 10).to_s
|
|
223
|
+
checksum_digit = croatian_id_checksum_digit(digits)
|
|
224
|
+
|
|
225
|
+
"#{prefix}#{digits}#{checksum_digit}"
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
##
|
|
229
|
+
# Produces a random Danish ID Number (CPR number).
|
|
230
|
+
# CPR number is 10 digits. Digit 1-6 is the birthdate (format "DDMMYY").
|
|
231
|
+
# Digit 7-10 is a sequence number.
|
|
232
|
+
# Digit 7 digit is a control digit that determines the century of birth.
|
|
233
|
+
# Digit 10 reveals the gender: # even is female, odd is male.
|
|
234
|
+
#
|
|
235
|
+
# @param formatted [Boolean] Specifies if the number is formatted with dividers.
|
|
236
|
+
# @param birthday [Date] Specifies the birthday for the id number.
|
|
237
|
+
# @param gender [Symbol] Specifies the gender for the id number. Must be one :male or :female if present.
|
|
238
|
+
# @return [String]
|
|
239
|
+
#
|
|
240
|
+
# @example
|
|
241
|
+
# Faker::IdNumber.danish_id_number #=> "0503909980"
|
|
242
|
+
# Faker::IdNumber.danish_id_number(formatted: true) #=> "050390-9980"
|
|
243
|
+
# Faker::IdNumber.danish_id_number(birthday: Date.new(1990, 3, 5)) #=> "0503909980"
|
|
244
|
+
# Faker::IdNumber.danish_id_number(gender: :female) #=> "0503909980"
|
|
245
|
+
#
|
|
246
|
+
# @faker.version next
|
|
247
|
+
def danish_id_number(formatted: false, birthday: Faker::Date.birthday, gender: nil)
|
|
248
|
+
valid_control_digits = danish_control_digits(birthday)
|
|
249
|
+
control_digit = sample(valid_control_digits)
|
|
250
|
+
digits = (0..9).to_a
|
|
251
|
+
gender = gender.to_sym if gender.respond_to?(:to_sym)
|
|
252
|
+
gender_digit = case gender
|
|
253
|
+
when nil
|
|
254
|
+
sample(digits)
|
|
255
|
+
when :male
|
|
256
|
+
sample(digits.select(&:odd?))
|
|
257
|
+
when :female
|
|
258
|
+
sample(digits.select(&:even?))
|
|
259
|
+
else
|
|
260
|
+
raise ArgumentError, "Invalid gender #{gender}. Must be one of male, female, or be omitted."
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
[
|
|
264
|
+
birthday.strftime('%d%m%y'),
|
|
265
|
+
formatted ? '-' : '',
|
|
266
|
+
control_digit,
|
|
267
|
+
Faker::Number.number(digits: 2),
|
|
268
|
+
gender_digit
|
|
269
|
+
].join
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
##
|
|
273
|
+
# Produces a random French social security number (INSEE number).
|
|
274
|
+
#
|
|
275
|
+
# @return [String]
|
|
276
|
+
#
|
|
277
|
+
# @example
|
|
278
|
+
# Faker::IdNumber.french_insee_number #=> "53290236-H"
|
|
279
|
+
#
|
|
280
|
+
# @faker.version next
|
|
281
|
+
def french_insee_number
|
|
282
|
+
num = [
|
|
283
|
+
[1, 2].sample(random: Faker::Config.random), # gender
|
|
284
|
+
Faker::Number.between(from: 0, to: 99).to_s.rjust(2, '0'), # year of birth
|
|
285
|
+
Faker::Number.between(from: 1, to: 12).to_s.rjust(2, '0'), # month of birth
|
|
286
|
+
Faker::Number.number(digits: 5), # place of birth
|
|
287
|
+
Faker::Number.number(digits: 3) # order number
|
|
288
|
+
].join
|
|
289
|
+
mod = num.to_i % 97
|
|
290
|
+
check = (97 - mod).to_s.rjust(2, '0')
|
|
291
|
+
"#{num}#{check}"
|
|
292
|
+
end
|
|
293
|
+
|
|
203
294
|
private
|
|
204
295
|
|
|
296
|
+
def croatian_id_checksum_digit(digits)
|
|
297
|
+
control_sum = 10
|
|
298
|
+
|
|
299
|
+
digits.chars.map(&:to_i).each do |digit|
|
|
300
|
+
control_sum += digit
|
|
301
|
+
control_sum %= 10
|
|
302
|
+
control_sum = 10 if control_sum.zero?
|
|
303
|
+
control_sum *= 2
|
|
304
|
+
control_sum %= 11
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
control_sum = 11 - control_sum
|
|
308
|
+
control_sum % 10
|
|
309
|
+
end
|
|
310
|
+
|
|
205
311
|
def chilean_verification_code(digits)
|
|
206
312
|
# First digit is multiplied by 3, second by 2, and so on
|
|
207
313
|
multiplication_rule = [3, 2, 7, 6, 5, 4, 3, 2]
|
|
@@ -232,7 +338,7 @@ module Faker
|
|
|
232
338
|
.with_index { |_, i| (i + 1).odd? }
|
|
233
339
|
|
|
234
340
|
sum_of_odd_digits = odd_digits_without_last_character.map(&:to_i).reduce(:+)
|
|
235
|
-
even_digits_times_two = (even_digits.join
|
|
341
|
+
even_digits_times_two = (even_digits.join.to_i * 2).to_s
|
|
236
342
|
sum_of_even_digits = even_digits_times_two.chars.map(&:to_i).reduce(:+)
|
|
237
343
|
|
|
238
344
|
total_sum = sum_of_odd_digits + sum_of_even_digits
|
|
@@ -271,9 +377,51 @@ module Faker
|
|
|
271
377
|
digits.include?(subtraction) ? digits[subtraction] : subtraction.to_s
|
|
272
378
|
end
|
|
273
379
|
|
|
380
|
+
def danish_control_digits(birthday)
|
|
381
|
+
year = birthday.year
|
|
382
|
+
century = year.to_s.slice(0, 2).to_i
|
|
383
|
+
year_digits = year.to_s.slice(2, 2).to_i
|
|
384
|
+
error_message = "Invalid birthday: #{birthday}. Danish CPR numbers are only distributed to persons born between 1858 and 2057."
|
|
385
|
+
|
|
386
|
+
case century
|
|
387
|
+
when 18
|
|
388
|
+
# If 5, 6, 7 or 8 and the year numbers are greater than or equal to 58, you were born in 18XX.
|
|
389
|
+
case year_digits
|
|
390
|
+
when 58..99
|
|
391
|
+
[5, 6, 7, 8]
|
|
392
|
+
else
|
|
393
|
+
raise ArgumentError, error_message
|
|
394
|
+
end
|
|
395
|
+
when 19
|
|
396
|
+
# If 0, 1, 2 or 3, you are always born in 19XX.
|
|
397
|
+
# If 4 or 9, you are born in 19XX if the year digits are greater than 36.
|
|
398
|
+
|
|
399
|
+
case year_digits
|
|
400
|
+
when 0..36
|
|
401
|
+
[0, 1, 2, 3]
|
|
402
|
+
else # 37..99
|
|
403
|
+
[0, 1, 2, 3, 4, 9]
|
|
404
|
+
end
|
|
405
|
+
else
|
|
406
|
+
# If 4, 5, 6, 7, 8 or 9 and the year digits are less than or equal to 36, you were born in 20XX.
|
|
407
|
+
# 5, 6, 7 and 8 are not distributed to persons, with year digits from and including 37 to and including 57.
|
|
408
|
+
case year_digits
|
|
409
|
+
when 0..36
|
|
410
|
+
[4, 5, 6, 7, 8, 9]
|
|
411
|
+
when 37..57
|
|
412
|
+
[5, 6, 7, 8]
|
|
413
|
+
else
|
|
414
|
+
raise ArgumentError, error_message
|
|
415
|
+
end
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
|
|
274
419
|
def _translate(key)
|
|
275
420
|
parse("id_number.#{key}")
|
|
276
421
|
end
|
|
277
422
|
end
|
|
278
423
|
end
|
|
424
|
+
|
|
425
|
+
include Faker::Deprecator
|
|
426
|
+
deprecate_generator('IDNumber', IdNumber)
|
|
279
427
|
end
|