faker 2.6.0
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 +7 -0
- data/CHANGELOG.md +1384 -0
- data/History.md +176 -0
- data/License.txt +20 -0
- data/README.md +364 -0
- data/bin/faker +5 -0
- data/lib/faker.rb +308 -0
- data/lib/faker/blockchain/aeternity.rb +70 -0
- data/lib/faker/blockchain/bitcoin.rb +60 -0
- data/lib/faker/blockchain/ethereum.rb +26 -0
- data/lib/faker/blockchain/tezos.rb +107 -0
- data/lib/faker/books/book.rb +61 -0
- data/lib/faker/books/culture_series.rb +83 -0
- data/lib/faker/books/dune.rb +119 -0
- data/lib/faker/books/lovecraft.rb +276 -0
- data/lib/faker/creature/animal.rb +22 -0
- data/lib/faker/creature/cat.rb +50 -0
- data/lib/faker/creature/dog.rb +115 -0
- data/lib/faker/creature/horse.rb +37 -0
- data/lib/faker/default/address.rb +123 -0
- data/lib/faker/default/alphanumeric.rb +73 -0
- data/lib/faker/default/ancient.rb +23 -0
- data/lib/faker/default/app.rb +77 -0
- data/lib/faker/default/appliance.rb +33 -0
- data/lib/faker/default/artist.rb +20 -0
- data/lib/faker/default/avatar.rb +60 -0
- data/lib/faker/default/bank.rb +108 -0
- data/lib/faker/default/beer.rb +41 -0
- data/lib/faker/default/boolean.rb +26 -0
- data/lib/faker/default/bossa_nova.rb +15 -0
- data/lib/faker/default/business.rb +23 -0
- data/lib/faker/default/cannabis.rb +45 -0
- data/lib/faker/default/chile_rut.rb +54 -0
- data/lib/faker/default/chuck_norris.rb +14 -0
- data/lib/faker/default/code.rb +201 -0
- data/lib/faker/default/coffee.rb +37 -0
- data/lib/faker/default/coin.rb +15 -0
- data/lib/faker/default/color.rb +32 -0
- data/lib/faker/default/commerce.rb +80 -0
- data/lib/faker/default/company.rb +264 -0
- data/lib/faker/default/compass.rb +67 -0
- data/lib/faker/default/construction.rb +29 -0
- data/lib/faker/default/cosmere.rb +48 -0
- data/lib/faker/default/crypto.rb +21 -0
- data/lib/faker/default/crypto_coin.rb +49 -0
- data/lib/faker/default/currency.rb +19 -0
- data/lib/faker/default/date.rb +182 -0
- data/lib/faker/default/dc_comics.rb +25 -0
- data/lib/faker/default/demographic.rb +41 -0
- data/lib/faker/default/dessert.rb +48 -0
- data/lib/faker/default/device.rb +85 -0
- data/lib/faker/default/driving_licence.rb +65 -0
- data/lib/faker/default/educator.rb +35 -0
- data/lib/faker/default/electrical_components.rb +48 -0
- data/lib/faker/default/esport.rb +27 -0
- data/lib/faker/default/file.rb +49 -0
- data/lib/faker/default/fillmurray.rb +23 -0
- data/lib/faker/default/finance.rb +44 -0
- data/lib/faker/default/food.rb +49 -0
- data/lib/faker/default/funny_name.rb +45 -0
- data/lib/faker/default/gender.rb +33 -0
- data/lib/faker/default/greek_philosophers.rb +33 -0
- data/lib/faker/default/hacker.rb +103 -0
- data/lib/faker/default/hipster.rb +97 -0
- data/lib/faker/default/house.rb +33 -0
- data/lib/faker/default/id_number.rb +164 -0
- data/lib/faker/default/industry_segments.rb +61 -0
- data/lib/faker/default/internet.rb +291 -0
- data/lib/faker/default/invoice.rb +109 -0
- data/lib/faker/default/job.rb +25 -0
- data/lib/faker/default/json.rb +87 -0
- data/lib/faker/default/kpop.rb +31 -0
- data/lib/faker/default/lorem.rb +151 -0
- data/lib/faker/default/lorem_flickr.rb +78 -0
- data/lib/faker/default/lorem_pixel.rb +47 -0
- data/lib/faker/default/markdown.rb +84 -0
- data/lib/faker/default/marketing.rb +22 -0
- data/lib/faker/default/measurement.rb +116 -0
- data/lib/faker/default/military.rb +72 -0
- data/lib/faker/default/name.rb +58 -0
- data/lib/faker/default/nation.rb +76 -0
- data/lib/faker/default/nato_phonetic_alphabet.rb +20 -0
- data/lib/faker/default/nhs.rb +38 -0
- data/lib/faker/default/number.rb +274 -0
- data/lib/faker/default/omniauth.rb +413 -0
- data/lib/faker/default/phone_number.rb +54 -0
- data/lib/faker/default/placeholdit.rb +41 -0
- data/lib/faker/default/programming_language.rb +33 -0
- data/lib/faker/default/relationship.rb +46 -0
- data/lib/faker/default/restaurant.rb +63 -0
- data/lib/faker/default/science.rb +46 -0
- data/lib/faker/default/slack_emoji.rb +43 -0
- data/lib/faker/default/source.rb +76 -0
- data/lib/faker/default/south_africa.rb +51 -0
- data/lib/faker/default/space.rb +64 -0
- data/lib/faker/default/string.rb +49 -0
- data/lib/faker/default/stripe.rb +81 -0
- data/lib/faker/default/subscription.rb +70 -0
- data/lib/faker/default/superhero.rb +72 -0
- data/lib/faker/default/team.rb +29 -0
- data/lib/faker/default/time.rb +179 -0
- data/lib/faker/default/twitter.rb +188 -0
- data/lib/faker/default/types.rb +101 -0
- data/lib/faker/default/university.rb +30 -0
- data/lib/faker/default/vehicle.rb +162 -0
- data/lib/faker/default/verb.rb +27 -0
- data/lib/faker/default/world_cup.rb +86 -0
- data/lib/faker/games/dota.rb +80 -0
- data/lib/faker/games/elder_scrolls.rb +113 -0
- data/lib/faker/games/fallout.rb +62 -0
- data/lib/faker/games/game.rb +48 -0
- data/lib/faker/games/half_life.rb +48 -0
- data/lib/faker/games/heroes.rb +48 -0
- data/lib/faker/games/heroes_of_the_storm.rb +61 -0
- data/lib/faker/games/league_of_legends.rb +87 -0
- data/lib/faker/games/myst.rb +74 -0
- data/lib/faker/games/overwatch.rb +48 -0
- data/lib/faker/games/pokemon.rb +48 -0
- data/lib/faker/games/sonic_the_hedgehog.rb +48 -0
- data/lib/faker/games/super_smash_bros.rb +35 -0
- data/lib/faker/games/witcher.rb +87 -0
- data/lib/faker/games/world_of_warcraft.rb +35 -0
- data/lib/faker/games/zelda.rb +62 -0
- data/lib/faker/japanese_media/dragon_ball.rb +22 -0
- data/lib/faker/japanese_media/one_piece.rb +87 -0
- data/lib/faker/japanese_media/sword_art_online.rb +61 -0
- data/lib/faker/movies/back_to_the_future.rb +49 -0
- data/lib/faker/movies/ghostbusters.rb +49 -0
- data/lib/faker/movies/harry_potter.rb +87 -0
- data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +106 -0
- data/lib/faker/movies/hobbit.rb +62 -0
- data/lib/faker/movies/lebowski.rb +48 -0
- data/lib/faker/movies/lord_of_the_rings.rb +49 -0
- data/lib/faker/movies/movie.rb +20 -0
- data/lib/faker/movies/princess_bride.rb +36 -0
- data/lib/faker/movies/star_wars.rb +201 -0
- data/lib/faker/movies/v_for_vendetta.rb +50 -0
- data/lib/faker/music/grateful_dead.rb +37 -0
- data/lib/faker/music/music.rb +47 -0
- data/lib/faker/music/opera.rb +26 -0
- data/lib/faker/music/phish.rb +22 -0
- data/lib/faker/music/rock_band.rb +22 -0
- data/lib/faker/music/umphreys_mcgee.rb +22 -0
- data/lib/faker/quotes/quote.rb +32 -0
- data/lib/faker/quotes/shakespeare.rb +41 -0
- data/lib/faker/sports/basketball.rb +61 -0
- data/lib/faker/sports/football.rb +74 -0
- data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +24 -0
- data/lib/faker/tv_shows/bojack_horseman.rb +51 -0
- data/lib/faker/tv_shows/breaking_bad.rb +37 -0
- data/lib/faker/tv_shows/buffy.rb +76 -0
- data/lib/faker/tv_shows/community.rb +38 -0
- data/lib/faker/tv_shows/dr_who.rb +115 -0
- data/lib/faker/tv_shows/dumb_and_dumber.rb +51 -0
- data/lib/faker/tv_shows/family_guy.rb +51 -0
- data/lib/faker/tv_shows/friends.rb +50 -0
- data/lib/faker/tv_shows/game_of_thrones.rb +77 -0
- data/lib/faker/tv_shows/hey_arnold.rb +50 -0
- data/lib/faker/tv_shows/how_i_met_your_mother.rb +64 -0
- data/lib/faker/tv_shows/michael_scott.rb +26 -0
- data/lib/faker/tv_shows/new_girl.rb +38 -0
- data/lib/faker/tv_shows/parks_and_rec.rb +37 -0
- data/lib/faker/tv_shows/rick_and_morty.rb +51 -0
- data/lib/faker/tv_shows/ru_paul.rb +37 -0
- data/lib/faker/tv_shows/seinfeld.rb +51 -0
- data/lib/faker/tv_shows/silicon_valley.rb +118 -0
- data/lib/faker/tv_shows/simpsons.rb +51 -0
- data/lib/faker/tv_shows/south_park.rb +38 -0
- data/lib/faker/tv_shows/star_trek.rb +63 -0
- data/lib/faker/tv_shows/stargate.rb +51 -0
- data/lib/faker/tv_shows/stranger_things.rb +38 -0
- data/lib/faker/tv_shows/the_expanse.rb +63 -0
- data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +51 -0
- data/lib/faker/tv_shows/the_it_crowd.rb +64 -0
- data/lib/faker/tv_shows/the_thick_of_it.rb +51 -0
- data/lib/faker/tv_shows/twin_peaks.rb +51 -0
- data/lib/faker/tv_shows/venture_bros.rb +65 -0
- data/lib/faker/version.rb +5 -0
- data/lib/helpers/base58.rb +22 -0
- data/lib/helpers/char.rb +66 -0
- data/lib/helpers/unique_generator.rb +56 -0
- data/lib/locales/README.md +40 -0
- data/lib/locales/ar.yml +102 -0
- data/lib/locales/bg.yml +44 -0
- data/lib/locales/ca-CAT.yml +24 -0
- data/lib/locales/ca.yml +31 -0
- data/lib/locales/da-DK.yml +73 -0
- data/lib/locales/de-AT.yml +56 -0
- data/lib/locales/de-CH.yml +19 -0
- data/lib/locales/de.yml +174 -0
- data/lib/locales/ee.yml +61 -0
- data/lib/locales/en-AU.yml +28 -0
- data/lib/locales/en-BORK.yml +4 -0
- data/lib/locales/en-CA.yml +36 -0
- data/lib/locales/en-GB.yml +14 -0
- data/lib/locales/en-IND.yml +25 -0
- data/lib/locales/en-MS.yml +47 -0
- data/lib/locales/en-NEP.yml +49 -0
- data/lib/locales/en-NG.yml +77 -0
- data/lib/locales/en-NZ.yml +39 -0
- data/lib/locales/en-PAK.yml +18 -0
- data/lib/locales/en-SG.yml +35 -0
- data/lib/locales/en-TH.yml +360 -0
- data/lib/locales/en-UG.yml +128 -0
- data/lib/locales/en-US.yml +103 -0
- data/lib/locales/en-ZA.yml +148 -0
- data/lib/locales/en-au-ocker.yml +33 -0
- data/lib/locales/en.yml +11 -0
- data/lib/locales/en/README.md +13 -0
- data/lib/locales/en/address.yml +581 -0
- data/lib/locales/en/ancient.yml +7 -0
- data/lib/locales/en/animal.yml +6 -0
- data/lib/locales/en/app.yml +8 -0
- data/lib/locales/en/appliance.yml +5 -0
- data/lib/locales/en/aqua_teen_hunger_force.yml +4 -0
- data/lib/locales/en/artist.yml +4 -0
- data/lib/locales/en/back_to_the_future.yml +120 -0
- data/lib/locales/en/bank.yml +302 -0
- data/lib/locales/en/basketball.yml +99 -0
- data/lib/locales/en/beer.yml +9 -0
- data/lib/locales/en/bojack_horseman.yml +6 -0
- data/lib/locales/en/book.yml +7 -0
- data/lib/locales/en/bossa_nova.yml +6 -0
- data/lib/locales/en/breaking_bad.yml +28 -0
- data/lib/locales/en/buffy.yml +260 -0
- data/lib/locales/en/business.yml +5 -0
- data/lib/locales/en/cannabis.yml +13 -0
- data/lib/locales/en/cat.yml +7 -0
- data/lib/locales/en/chuck_norris.yml +82 -0
- data/lib/locales/en/code.yml +4 -0
- data/lib/locales/en/coffee.yml +31 -0
- data/lib/locales/en/coin.yml +6 -0
- data/lib/locales/en/color.yml +4 -0
- data/lib/locales/en/commerce.yml +11 -0
- data/lib/locales/en/community.yml +33 -0
- data/lib/locales/en/company.yml +22 -0
- data/lib/locales/en/compass.yml +34 -0
- data/lib/locales/en/construction.yml +425 -0
- data/lib/locales/en/cosmere.yml +57 -0
- data/lib/locales/en/crypto_coin.yml +25 -0
- data/lib/locales/en/culture_series.yml +307 -0
- data/lib/locales/en/currency.yml +6 -0
- data/lib/locales/en/dc_comics.yml +52 -0
- data/lib/locales/en/demographic.yml +8 -0
- data/lib/locales/en/dessert.yml +6 -0
- data/lib/locales/en/device.yml +7 -0
- data/lib/locales/en/dog.yml +11 -0
- data/lib/locales/en/dota.yml +105 -0
- data/lib/locales/en/dr_who.yml +96 -0
- data/lib/locales/en/dragon_ball.yml +4 -0
- data/lib/locales/en/dumb_and_dumber.yml +59 -0
- data/lib/locales/en/dune.yml +159 -0
- data/lib/locales/en/educator.yml +11 -0
- data/lib/locales/en/elder_scrolls.yml +11 -0
- data/lib/locales/en/electrical_components.yml +6 -0
- data/lib/locales/en/esport.yml +8 -0
- data/lib/locales/en/fallout.yml +137 -0
- data/lib/locales/en/family_guy.yml +7 -0
- data/lib/locales/en/file.yml +5 -0
- data/lib/locales/en/finance.yml +113 -0
- data/lib/locales/en/food.yml +13 -0
- data/lib/locales/en/football.yml +8 -0
- data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
- data/lib/locales/en/friends.yml +6 -0
- data/lib/locales/en/funny_name.yml +4 -0
- data/lib/locales/en/game.yml +283 -0
- data/lib/locales/en/game_of_thrones.yml +8 -0
- data/lib/locales/en/gender.yml +5 -0
- data/lib/locales/en/ghostbusters.yml +91 -0
- data/lib/locales/en/grateful_dead.yml +48 -0
- data/lib/locales/en/greek_philosophers.yml +26 -0
- data/lib/locales/en/hacker.yml +8 -0
- data/lib/locales/en/half_life.yml +7 -0
- data/lib/locales/en/harry_potter.yml +9 -0
- data/lib/locales/en/heroes.yml +6 -0
- data/lib/locales/en/heroes_of_the_storm.yml +7 -0
- data/lib/locales/en/hey_arnold.yml +24 -0
- data/lib/locales/en/hipster.yml +4 -0
- data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
- data/lib/locales/en/hobbit.yml +19 -0
- data/lib/locales/en/horse.yml +6 -0
- data/lib/locales/en/house.yml +5 -0
- data/lib/locales/en/how_i_met_your_mother.yml +28 -0
- data/lib/locales/en/id_number.yml +5 -0
- data/lib/locales/en/industry_segments.yml +7 -0
- data/lib/locales/en/internet.yml +21 -0
- data/lib/locales/en/invoice.yml +6 -0
- data/lib/locales/en/job.yml +15 -0
- data/lib/locales/en/kpop.yml +83 -0
- data/lib/locales/en/league_of_legends.yml +10 -0
- data/lib/locales/en/lebowski.yml +43 -0
- data/lib/locales/en/lord_of_the_rings.yml +6 -0
- data/lib/locales/en/lorem.yml +11 -0
- data/lib/locales/en/lovecraft.yml +9 -0
- data/lib/locales/en/markdown.yml +5 -0
- data/lib/locales/en/marketing.yml +4 -0
- data/lib/locales/en/measurement.yml +11 -0
- data/lib/locales/en/michael_scott.yml +45 -0
- data/lib/locales/en/military.yml +8 -0
- data/lib/locales/en/movie.yml +5 -0
- data/lib/locales/en/music.yml +32 -0
- data/lib/locales/en/myst.yml +48 -0
- data/lib/locales/en/name.yml +25 -0
- data/lib/locales/en/nation.yml +11 -0
- data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
- data/lib/locales/en/new_girl.yml +40 -0
- data/lib/locales/en/one_piece.yml +9 -0
- data/lib/locales/en/opera.yml +172 -0
- data/lib/locales/en/overwatch.yml +41 -0
- data/lib/locales/en/parks_and_rec.yml +7 -0
- data/lib/locales/en/phish.yml +4 -0
- data/lib/locales/en/phone_number.yml +7 -0
- data/lib/locales/en/pokemon.yml +8 -0
- data/lib/locales/en/princess_bride.yml +5 -0
- data/lib/locales/en/programming_language.yml +6 -0
- data/lib/locales/en/quote.yml +166 -0
- data/lib/locales/en/relationship.yml +10 -0
- data/lib/locales/en/restaurant.yml +129 -0
- data/lib/locales/en/rick_and_morty.yml +6 -0
- data/lib/locales/en/rock_band.yml +4 -0
- data/lib/locales/en/rupaul.yml +125 -0
- data/lib/locales/en/science.yml +6 -0
- data/lib/locales/en/seinfeld.yml +6 -0
- data/lib/locales/en/shakespeare.yml +56 -0
- data/lib/locales/en/silicon_valley.yml +53 -0
- data/lib/locales/en/simpsons.yml +26 -0
- data/lib/locales/en/slack_emoji.yml +20 -0
- data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
- data/lib/locales/en/source.yml +16 -0
- data/lib/locales/en/south_park.yml +5 -0
- data/lib/locales/en/space.yml +17 -0
- data/lib/locales/en/star_trek.yml +7 -0
- data/lib/locales/en/star_wars.yml +258 -0
- data/lib/locales/en/stargate.yml +21 -0
- data/lib/locales/en/stranger_thing.yml +36 -0
- data/lib/locales/en/stripe.yml +42 -0
- data/lib/locales/en/subscription.yml +8 -0
- data/lib/locales/en/super_smash_bros.yml +205 -0
- data/lib/locales/en/superhero.yml +12 -0
- data/lib/locales/en/sword_art_online.yml +334 -0
- data/lib/locales/en/team.yml +8 -0
- data/lib/locales/en/the_expanse.yml +7 -0
- data/lib/locales/en/the_it_crowd.yml +155 -0
- data/lib/locales/en/the_thick_of_it.yml +6 -0
- data/lib/locales/en/twin_peaks.yml +6 -0
- data/lib/locales/en/umphreys_mcgee.yml +4 -0
- data/lib/locales/en/university.yml +10 -0
- data/lib/locales/en/v_for_vendetta.yml +163 -0
- data/lib/locales/en/vehicle.yml +80 -0
- data/lib/locales/en/venture_bros.yml +7 -0
- data/lib/locales/en/verbs.yml +8 -0
- data/lib/locales/en/witcher.yml +11 -0
- data/lib/locales/en/world_cup.yml +271 -0
- data/lib/locales/en/world_of_warcraft.yml +8 -0
- data/lib/locales/en/yoda.yml +4 -0
- data/lib/locales/en/zelda.yml +8 -0
- data/lib/locales/es-MX.yml +102 -0
- data/lib/locales/es.yml +94 -0
- data/lib/locales/fa.yml +10 -0
- data/lib/locales/fi-FI.yml +35 -0
- data/lib/locales/fr-CA.yml +90 -0
- data/lib/locales/fr-CH.yml +78 -0
- data/lib/locales/fr.yml +114 -0
- data/lib/locales/he.yml +27 -0
- data/lib/locales/hy.yml +416 -0
- data/lib/locales/id.yml +23 -0
- data/lib/locales/it.yml +70 -0
- data/lib/locales/ja.yml +97 -0
- data/lib/locales/ko.yml +40 -0
- data/lib/locales/lv.yml +55 -0
- data/lib/locales/nb-NO.yml +62 -0
- data/lib/locales/nl.yml +92 -0
- data/lib/locales/no.yml +7 -0
- data/lib/locales/pl.yml +77 -0
- data/lib/locales/pt-BR.yml +697 -0
- data/lib/locales/pt.yml +66 -0
- data/lib/locales/ru.yml +76 -0
- data/lib/locales/sk.yml +78 -0
- data/lib/locales/sv.yml +81 -0
- data/lib/locales/th.yml +380 -0
- data/lib/locales/tr.yml +40 -0
- data/lib/locales/uk.yml +86 -0
- data/lib/locales/vi.yml +68 -0
- data/lib/locales/zh-CN.yml +56 -0
- data/lib/locales/zh-TW.yml +29 -0
- metadata +568 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class ChileRut < Base
|
|
5
|
+
class << self
|
|
6
|
+
@last_rut = nil
|
|
7
|
+
|
|
8
|
+
# Fixed param added for testing a specific RUT and check digit combination.
|
|
9
|
+
def rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 1, fixed: false)
|
|
10
|
+
warn_for_deprecated_arguments do |keywords|
|
|
11
|
+
keywords << :min_rut if legacy_min_rut != NOT_GIVEN
|
|
12
|
+
keywords << :fixed if legacy_fixed != NOT_GIVEN
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
@last_rut = fixed ? min_rut : rand_in_range(min_rut, 99_999_999)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def dv
|
|
19
|
+
split_reversed_rut = @last_rut.to_s.reverse.split('')
|
|
20
|
+
seq = [2, 3, 4, 5, 6, 7]
|
|
21
|
+
i = 0
|
|
22
|
+
digit_sum = split_reversed_rut.reduce(0) do |sum, n|
|
|
23
|
+
partial_result = sum.to_i + (n.to_i * seq[i])
|
|
24
|
+
i = i == 5 ? 0 : i + 1
|
|
25
|
+
partial_result
|
|
26
|
+
end
|
|
27
|
+
partial_check_digit = 11 - (digit_sum % 11)
|
|
28
|
+
if partial_check_digit == 11
|
|
29
|
+
'0'
|
|
30
|
+
elsif partial_check_digit == 10
|
|
31
|
+
'k'
|
|
32
|
+
else
|
|
33
|
+
partial_check_digit.to_s
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Alias for english speaking devs.
|
|
38
|
+
def check_digit
|
|
39
|
+
dv
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def full_rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 0, fixed: false)
|
|
43
|
+
warn_for_deprecated_arguments do |keywords|
|
|
44
|
+
keywords << :min_rut if legacy_min_rut != NOT_GIVEN
|
|
45
|
+
keywords << :fixed if legacy_fixed != NOT_GIVEN
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
"#{rut(min_rut: min_rut, fixed: fixed)}-#{dv}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
attr_reader :last_rut
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class ChuckNorris < Base
|
|
5
|
+
flexible :chuck_norris
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
# from: https://github.com/jenkinsci/chucknorris-plugin/blob/master/src/main/java/hudson/plugins/chucknorris/FactGenerator.java
|
|
9
|
+
def fact
|
|
10
|
+
fetch('chuck_norris.fact')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Code < Base
|
|
5
|
+
flexible :code
|
|
6
|
+
class << self
|
|
7
|
+
# Generates a 10 digit NPI (National Provider Identifier
|
|
8
|
+
# issued to health care providers in the United States)
|
|
9
|
+
def npi
|
|
10
|
+
rand(10**10).to_s.rjust(10, '0')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# By default generates 10 sign isbn code in format 123456789-X
|
|
14
|
+
# You can pass 13 to generate new 13 sign code
|
|
15
|
+
def isbn(legacy_base = NOT_GIVEN, base: 10)
|
|
16
|
+
warn_for_deprecated_arguments do |keywords|
|
|
17
|
+
keywords << :base if legacy_base != NOT_GIVEN
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
base == 13 ? generate_base13_isbn : generate_base10_isbn
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# By default generates 13 sign ean code in format 1234567890123
|
|
24
|
+
# You can pass 8 to generate ean8 code
|
|
25
|
+
def ean(legacy_base = NOT_GIVEN, base: 13)
|
|
26
|
+
warn_for_deprecated_arguments do |keywords|
|
|
27
|
+
keywords << :base if legacy_base != NOT_GIVEN
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
base == 8 ? generate_base8_ean : generate_base13_ean
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def rut
|
|
34
|
+
value = Number.number(digits: 8).to_s
|
|
35
|
+
vd = rut_verificator_digit(value)
|
|
36
|
+
value << "-#{vd}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# By default generates a Singaporean NRIC ID for someone
|
|
40
|
+
# who is born between the age of 18 and 65.
|
|
41
|
+
def nric(legacy_min_age = NOT_GIVEN, legacy_max_age = NOT_GIVEN, min_age: 18, max_age: 65)
|
|
42
|
+
warn_for_deprecated_arguments do |keywords|
|
|
43
|
+
keywords << :min_age if legacy_min_age != NOT_GIVEN
|
|
44
|
+
keywords << :max_age if legacy_max_age != NOT_GIVEN
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
birthyear = Date.birthday(min_age: min_age, max_age: max_age).year
|
|
48
|
+
prefix = birthyear < 2000 ? 'S' : 'T'
|
|
49
|
+
values = birthyear.to_s[-2..-1]
|
|
50
|
+
values << regexify(/\d{5}/)
|
|
51
|
+
check_alpha = generate_nric_check_alphabet(values, prefix)
|
|
52
|
+
"#{prefix}#{values}#{check_alpha}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Generate GSM modem, device or mobile phone 15 digit IMEI number.
|
|
56
|
+
def imei
|
|
57
|
+
generate_imei
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Retrieves a real Amazon ASIN code list taken from
|
|
61
|
+
# https://archive.org/details/asin_listing
|
|
62
|
+
def asin
|
|
63
|
+
fetch('code.asin')
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Generates Social Insurance Number issued in Canada
|
|
67
|
+
# https://en.wikipedia.org/wiki/Social_Insurance_Number
|
|
68
|
+
def sin
|
|
69
|
+
# 1 - province or temporary resident
|
|
70
|
+
# 2-8 - random numbers
|
|
71
|
+
# 9 - checksum
|
|
72
|
+
|
|
73
|
+
# 1st digit. 8,0 are not used
|
|
74
|
+
registry = Faker::Base.sample([1, 2, 3, 4, 5, 6, 7, 9]).to_s
|
|
75
|
+
|
|
76
|
+
# generate 2nd to 8th
|
|
77
|
+
partial = Array.new(7) { Faker::Config.random.rand(0..9) }.join
|
|
78
|
+
|
|
79
|
+
# Generate 9th digit
|
|
80
|
+
check_digit = generate_sin_check_digit(registry + partial + '0').to_s
|
|
81
|
+
|
|
82
|
+
registry + partial + check_digit
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
# Reporting body identifier
|
|
88
|
+
RBI = %w[01 10 30 33 35 44 45 49 50 51 52 53 54 86 91 98 99].freeze
|
|
89
|
+
|
|
90
|
+
def generate_imei
|
|
91
|
+
str = Array.new(15, 0)
|
|
92
|
+
sum = 0
|
|
93
|
+
t = 0
|
|
94
|
+
len_offset = 0
|
|
95
|
+
len = 15
|
|
96
|
+
|
|
97
|
+
# Fill in the first two values of the string based with the specified prefix.
|
|
98
|
+
# Reporting Body Identifier list: http://en.wikipedia.org/wiki/Reporting_Body_Identifier
|
|
99
|
+
arr = sample(RBI)
|
|
100
|
+
str[0] = arr[0].to_i
|
|
101
|
+
str[1] = arr[1].to_i
|
|
102
|
+
pos = 2
|
|
103
|
+
|
|
104
|
+
# Fill all the remaining numbers except for the last one with random values.
|
|
105
|
+
while pos < (len - 1)
|
|
106
|
+
str[pos] = rand(0..9)
|
|
107
|
+
pos += 1
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Calculate the Luhn checksum of the values thus far
|
|
111
|
+
len_offset = (len + 1) % 2
|
|
112
|
+
(0..(len - 1)).each do |position|
|
|
113
|
+
if (position + len_offset).odd?
|
|
114
|
+
t = str[position] * 2
|
|
115
|
+
|
|
116
|
+
t -= 9 if t > 9
|
|
117
|
+
|
|
118
|
+
sum += t
|
|
119
|
+
else
|
|
120
|
+
sum += str[position]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Choose the last digit so that it causes the entire string to pass the checksum.
|
|
125
|
+
str[len - 1] = (10 - (sum % 10)) % 10
|
|
126
|
+
|
|
127
|
+
# Output the IMEI value.
|
|
128
|
+
str.join('')
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def generate_base10_isbn
|
|
132
|
+
values = regexify(/\d{9}/)
|
|
133
|
+
remainder = sum(values) { |value, index| (index + 1) * value.to_i } % 11
|
|
134
|
+
values << "-#{remainder == 10 ? 'X' : remainder}"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def generate_base13_isbn
|
|
138
|
+
values = regexify(/\d{12}/)
|
|
139
|
+
remainder = sum(values) { |value, index| index.even? ? value.to_i : value.to_i * 3 } % 10
|
|
140
|
+
values << "-#{((10 - remainder) % 10)}"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def sum(values)
|
|
144
|
+
values.split(//).each_with_index.inject(0) do |sum, (value, index)|
|
|
145
|
+
sum + yield(value, index)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def generate_base8_ean
|
|
150
|
+
values = regexify(/\d{7}/)
|
|
151
|
+
check_digit = 10 - values.split(//).each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT8[i] } % 10
|
|
152
|
+
values << (check_digit == 10 ? 0 : check_digit).to_s
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def generate_base13_ean
|
|
156
|
+
values = regexify(/\d{12}/)
|
|
157
|
+
check_digit = 10 - values.split(//).each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT13[i] } % 10
|
|
158
|
+
values << (check_digit == 10 ? 0 : check_digit).to_s
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
EAN_CHECK_DIGIT8 = [3, 1, 3, 1, 3, 1, 3].freeze
|
|
162
|
+
EAN_CHECK_DIGIT13 = [1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3].freeze
|
|
163
|
+
|
|
164
|
+
def rut_verificator_digit(rut)
|
|
165
|
+
total = rut.to_s.rjust(8, '0').split(//).zip(%w[3 2 7 6 5 4 3 2]).collect { |a, b| a.to_i * b.to_i }.inject(:+)
|
|
166
|
+
(11 - total % 11).to_s.gsub(/10/, 'k').gsub(/11/, '0')
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def generate_nric_check_alphabet(values, prefix)
|
|
170
|
+
weight = %w[2 7 6 5 4 3 2]
|
|
171
|
+
total = values.split(//).zip(weight).collect { |a, b| a.to_i * b.to_i }.inject(:+)
|
|
172
|
+
total += 4 if prefix == 'T'
|
|
173
|
+
%w[A B C D E F G H I Z J][10 - total % 11]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def generate_sin_check_digit(digits)
|
|
177
|
+
# Fast Luhn checksum code from luhn.js:
|
|
178
|
+
# https://gist.github.com/ShirtlessKirk/2134376
|
|
179
|
+
|
|
180
|
+
len = 9
|
|
181
|
+
mul = 0
|
|
182
|
+
|
|
183
|
+
luhn_arr = [
|
|
184
|
+
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
|
185
|
+
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
|
|
186
|
+
]
|
|
187
|
+
sum = 0
|
|
188
|
+
|
|
189
|
+
while len.positive?
|
|
190
|
+
len -= 1
|
|
191
|
+
num = digits[len].to_i
|
|
192
|
+
sum += luhn_arr[mul][num]
|
|
193
|
+
mul ^= 1
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
checksum = sum % 10
|
|
197
|
+
checksum.zero? ? checksum : (10 - checksum)
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Coffee < Base
|
|
5
|
+
flexible :coffee
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def blend_name
|
|
9
|
+
parse('coffee.blend_name')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def origin
|
|
13
|
+
country = fetch('coffee.country')
|
|
14
|
+
region = fetch("coffee.regions.#{search_format(country)}")
|
|
15
|
+
"#{region}, #{country}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def variety
|
|
19
|
+
fetch('coffee.variety')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def notes
|
|
23
|
+
parse('coffee.notes')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def intensifier
|
|
27
|
+
fetch('coffee.intensifier')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def search_format(key)
|
|
33
|
+
key.split.length > 1 ? key.split.join('_').downcase : key.downcase
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Color < Base
|
|
5
|
+
class << self
|
|
6
|
+
def hex_color
|
|
7
|
+
format('#%06x', (rand * 0xffffff))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def color_name
|
|
11
|
+
fetch('color.name')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def single_rgb_color
|
|
15
|
+
sample((0..255).to_a)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def rgb_color
|
|
19
|
+
Array.new(3) { single_rgb_color }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# returns [hue, saturation, lightness]
|
|
23
|
+
def hsl_color
|
|
24
|
+
[sample((0..360).to_a), rand.round(2), rand.round(2)]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def hsla_color
|
|
28
|
+
hsl_color << rand.round(1)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Commerce < Base
|
|
5
|
+
class << self
|
|
6
|
+
def color
|
|
7
|
+
fetch('color.name')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def promotion_code(legacy_digits = NOT_GIVEN, digits: 6)
|
|
11
|
+
warn_for_deprecated_arguments do |keywords|
|
|
12
|
+
keywords << :digits if legacy_digits != NOT_GIVEN
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
[
|
|
16
|
+
fetch('commerce.promotion_code.adjective'),
|
|
17
|
+
fetch('commerce.promotion_code.noun'),
|
|
18
|
+
Faker::Number.number(digits: digits)
|
|
19
|
+
].join
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def department(legacy_max = NOT_GIVEN, legacy_fixed_amount = NOT_GIVEN, max: 3, fixed_amount: false)
|
|
23
|
+
warn_for_deprecated_arguments do |keywords|
|
|
24
|
+
keywords << :max if legacy_max != NOT_GIVEN
|
|
25
|
+
keywords << :fixed_amount if legacy_fixed_amount != NOT_GIVEN
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
num = max if fixed_amount
|
|
29
|
+
num ||= 1 + rand(max)
|
|
30
|
+
|
|
31
|
+
categories = categories(num)
|
|
32
|
+
|
|
33
|
+
return merge_categories(categories) if num > 1
|
|
34
|
+
|
|
35
|
+
categories[0]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def product_name
|
|
39
|
+
"#{fetch('commerce.product_name.adjective')} #{fetch('commerce.product_name.material')} #{fetch('commerce.product_name.product')}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def material
|
|
43
|
+
fetch('commerce.product_name.material')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def price(legacy_range = NOT_GIVEN, legacy_as_string = NOT_GIVEN, range: 0..100.0, as_string: false)
|
|
47
|
+
warn_for_deprecated_arguments do |keywords|
|
|
48
|
+
keywords << :range if legacy_range != NOT_GIVEN
|
|
49
|
+
keywords << :as_string if legacy_as_string != NOT_GIVEN
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
price = (rand(range) * 100).floor / 100.0
|
|
53
|
+
if as_string
|
|
54
|
+
price_parts = price.to_s.split('.')
|
|
55
|
+
price = price_parts[0] + '.' + price_parts[-1].ljust(2, '0')
|
|
56
|
+
end
|
|
57
|
+
price
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def categories(num)
|
|
63
|
+
categories = []
|
|
64
|
+
while categories.length < num
|
|
65
|
+
category = fetch('commerce.department')
|
|
66
|
+
categories << category unless categories.include?(category)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
categories
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def merge_categories(categories)
|
|
73
|
+
separator = fetch('separator')
|
|
74
|
+
comma_separated = categories.slice!(0...-1).join(', ')
|
|
75
|
+
|
|
76
|
+
[comma_separated, categories[0]].join(separator)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Company < Base
|
|
5
|
+
flexible :company
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def name
|
|
9
|
+
parse('company.name')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def suffix
|
|
13
|
+
fetch('company.suffix')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def industry
|
|
17
|
+
fetch('company.industry')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Generate a buzzword-laden catch phrase.
|
|
21
|
+
def catch_phrase
|
|
22
|
+
translate('faker.company.buzzwords').collect { |list| sample(list) }.join(' ')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def buzzword
|
|
26
|
+
sample(translate('faker.company.buzzwords').flatten)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# When a straight answer won't do, BS to the rescue!
|
|
30
|
+
def bs
|
|
31
|
+
translate('faker.company.bs').collect { |list| sample(list) }.join(' ')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def ein
|
|
35
|
+
format('%09d', rand(10**9)).gsub(/(\d{2})(\d{7})/, '\\1-\\2')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def duns_number
|
|
39
|
+
format('%09d', rand(10**9)).gsub(/(\d{2})(\d{3})(\d{4})/, '\\1-\\2-\\3')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Get a random company logo url in PNG format.
|
|
43
|
+
def logo
|
|
44
|
+
rand_num = rand(1..13)
|
|
45
|
+
"https://pigment.github.io/fake-logos/logos/medium/color/#{rand_num}.png"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def type
|
|
49
|
+
fetch('company.type')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def profession
|
|
53
|
+
fetch('company.profession')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# rubocop:disable Style/AsciiComments
|
|
57
|
+
# Get a random Spanish organization number. See more here https://es.wikipedia.org/wiki/Número_de_identificación_fiscal
|
|
58
|
+
# rubocop:enable Style/AsciiComments
|
|
59
|
+
def spanish_organisation_number
|
|
60
|
+
# Valid leading character: A, B, C, D, E, F, G, H, J, N, P, Q, R, S, U, V, W
|
|
61
|
+
# 7 digit numbers
|
|
62
|
+
letters = %w[A B C D E F G H J N P Q R S U V W]
|
|
63
|
+
base = [sample(letters), format('%07d', rand(10**7))].join
|
|
64
|
+
base
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Get a random Swedish organization number. See more here https://sv.wikipedia.org/wiki/Organisationsnummer
|
|
68
|
+
def swedish_organisation_number
|
|
69
|
+
# Valid leading digit: 1, 2, 3, 5, 6, 7, 8, 9
|
|
70
|
+
# Valid third digit: >= 2
|
|
71
|
+
# Last digit is a control digit
|
|
72
|
+
base = [sample([1, 2, 3, 5, 6, 7, 8, 9]), sample((0..9).to_a), sample((2..9).to_a), format('%06d', rand(10**6))].join
|
|
73
|
+
base + luhn_algorithm(base).to_s
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def czech_organisation_number
|
|
77
|
+
sum = 0
|
|
78
|
+
base = []
|
|
79
|
+
[8, 7, 6, 5, 4, 3, 2].each do |weight|
|
|
80
|
+
base << sample((0..9).to_a)
|
|
81
|
+
sum += (weight * base.last)
|
|
82
|
+
end
|
|
83
|
+
base << (11 - (sum % 11)) % 10
|
|
84
|
+
base.join
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Get a random French SIREN number. See more here https://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27identification_du_r%C3%A9pertoire_des_entreprises
|
|
88
|
+
def french_siren_number
|
|
89
|
+
base = (1..8).map { rand(10) }.join
|
|
90
|
+
base + luhn_algorithm(base).to_s
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def french_siret_number
|
|
94
|
+
location = rand(100).to_s.rjust(4, '0')
|
|
95
|
+
org_no = french_siren_number + location
|
|
96
|
+
org_no + luhn_algorithm(org_no).to_s
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Get a random Norwegian organization number. Info: https://www.brreg.no/om-oss/samfunnsoppdraget-vart/registera-vare/einingsregisteret/organisasjonsnummeret/
|
|
100
|
+
def norwegian_organisation_number
|
|
101
|
+
# Valid leading digit: 8, 9
|
|
102
|
+
mod11_check = nil
|
|
103
|
+
while mod11_check.nil?
|
|
104
|
+
base = [sample([8, 9]), format('%07d', rand(10**7))].join
|
|
105
|
+
mod11_check = mod11(base)
|
|
106
|
+
end
|
|
107
|
+
base + mod11_check.to_s
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def australian_business_number
|
|
111
|
+
base = format('%09d', rand(10**9))
|
|
112
|
+
abn = "00#{base}"
|
|
113
|
+
|
|
114
|
+
(99 - (abn_checksum(abn) % 89)).to_s + base
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Get a random Polish taxpayer identification number More info https://pl.wikipedia.org/wiki/NIP
|
|
118
|
+
def polish_taxpayer_identification_number
|
|
119
|
+
result = []
|
|
120
|
+
weights = [6, 5, 7, 2, 3, 4, 5, 6, 7]
|
|
121
|
+
loop do
|
|
122
|
+
result = Array.new(3) { rand(1..9) } + Array.new(7) { rand(10) }
|
|
123
|
+
break if (weight_sum(result, weights) % 11) == result[9]
|
|
124
|
+
end
|
|
125
|
+
result.join('')
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Get a random Polish register of national economy number. More info https://pl.wikipedia.org/wiki/REGON
|
|
129
|
+
def polish_register_of_national_economy(legacy_length = NOT_GIVEN, length: 9)
|
|
130
|
+
warn_for_deprecated_arguments do |keywords|
|
|
131
|
+
keywords << :length if legacy_length != NOT_GIVEN
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
raise ArgumentError, 'Length should be 9 or 14' unless [9, 14].include? length
|
|
135
|
+
|
|
136
|
+
random_digits = []
|
|
137
|
+
loop do
|
|
138
|
+
random_digits = Array.new(length) { rand(10) }
|
|
139
|
+
break if collect_regon_sum(random_digits) == random_digits.last
|
|
140
|
+
end
|
|
141
|
+
random_digits.join('')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def south_african_pty_ltd_registration_number
|
|
145
|
+
regexify(/\d{4}\/\d{4,10}\/07/)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def south_african_close_corporation_registration_number
|
|
149
|
+
regexify(/(CK\d{2}|\d{4})\/\d{4,10}\/23/)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def south_african_listed_company_registration_number
|
|
153
|
+
regexify(/\d{4}\/\d{4,10}\/06/)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def south_african_trust_registration_number
|
|
157
|
+
regexify(/IT\d{2,4}\/\d{2,10}/)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def brazilian_company_number(legacy_formatted = NOT_GIVEN, formatted: false)
|
|
161
|
+
warn_for_deprecated_arguments do |keywords|
|
|
162
|
+
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
digits = Array.new(8) { Faker::Number.digit.to_i } + [0, 0, 0, Faker::Number.non_zero_digit.to_i]
|
|
166
|
+
|
|
167
|
+
factors = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 6].cycle
|
|
168
|
+
|
|
169
|
+
2.times do
|
|
170
|
+
checksum = digits.inject(0) { |acc, digit| acc + digit * factors.next } % 11
|
|
171
|
+
digits << (checksum < 2 ? 0 : 11 - checksum)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
number = digits.join
|
|
175
|
+
|
|
176
|
+
formatted ? format('%s.%s.%s/%s-%s', *number.scan(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/).flatten) : number
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def sic_code
|
|
180
|
+
fetch('company.sic_code')
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
private
|
|
184
|
+
|
|
185
|
+
# Mod11 functionality from https://github.com/badmanski/mod11/blob/master/lib/mod11.rb
|
|
186
|
+
def mod11(number)
|
|
187
|
+
weight = [2, 3, 4, 5, 6, 7,
|
|
188
|
+
2, 3, 4, 5, 6, 7,
|
|
189
|
+
2, 3, 4, 5, 6, 7]
|
|
190
|
+
|
|
191
|
+
sum = 0
|
|
192
|
+
|
|
193
|
+
number.to_s.reverse.chars.each_with_index do |char, i|
|
|
194
|
+
sum += char.to_i * weight[i]
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
remainder = sum % 11
|
|
198
|
+
|
|
199
|
+
case remainder
|
|
200
|
+
when 0 then remainder
|
|
201
|
+
when 1 then nil
|
|
202
|
+
else 11 - remainder
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def luhn_algorithm(number)
|
|
207
|
+
multiplications = []
|
|
208
|
+
|
|
209
|
+
number.to_s.reverse.split(//).each_with_index do |digit, i|
|
|
210
|
+
multiplications << if i.even?
|
|
211
|
+
digit.to_i * 2
|
|
212
|
+
else
|
|
213
|
+
digit.to_i
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
sum = 0
|
|
218
|
+
|
|
219
|
+
multiplications.each do |num|
|
|
220
|
+
num.to_s.each_byte do |character|
|
|
221
|
+
sum += character.chr.to_i
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
control_digit = if (sum % 10).zero?
|
|
226
|
+
0
|
|
227
|
+
else
|
|
228
|
+
(sum / 10 + 1) * 10 - sum
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
control_digit
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def abn_checksum(abn)
|
|
235
|
+
abn_weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
|
|
236
|
+
sum = 0
|
|
237
|
+
|
|
238
|
+
abn_weights.each_with_index do |weight, i|
|
|
239
|
+
sum += weight * abn[i].to_i
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
sum
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def collect_regon_sum(array)
|
|
246
|
+
weights = if array.size == 9
|
|
247
|
+
[8, 9, 2, 3, 4, 5, 6, 7]
|
|
248
|
+
else
|
|
249
|
+
[2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8]
|
|
250
|
+
end
|
|
251
|
+
sum = weight_sum(array, weights) % 11
|
|
252
|
+
sum == 10 ? 0 : sum
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def weight_sum(array, weights)
|
|
256
|
+
sum = 0
|
|
257
|
+
(0..weights.size - 1).each do |index|
|
|
258
|
+
sum += (array[index] * weights[index])
|
|
259
|
+
end
|
|
260
|
+
sum
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
end
|