Skip to content

Commit 7491858

Browse files
feat: added USA ssn module (#83)
* added USA ssn module * missing file * added 0 padding * updated tests with check macro. Added ssn len test * update tests for older versions of nim Co-authored-by: Josh Jones <[email protected]>
1 parent 25fc7ea commit 7491858

File tree

5 files changed

+76
-0
lines changed

5 files changed

+76
-0
lines changed

src/faker/provider.nim

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import provider/misc
1717
import provider/person
1818
import provider/phone_number
1919
import provider/user_agent
20+
import provider/ssn
2021

2122
export address
2223
export automotive
@@ -32,3 +33,4 @@ export misc
3233
export person
3334
export phone_number
3435
export user_agent
36+
export ssn

src/faker/provider/ssn.nim

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# ----------------------------------------------- #
2+
# This module was generated by 'generator' tool . #
3+
# See 'tools/generator'. #
4+
# ----------------------------------------------- #
5+
6+
import ../base
7+
import ssn/ssn_en_US
8+
export base
9+
10+
proc ssn*(f: Faker): string =
11+
## Generates random job.
12+
runnableExamples:
13+
let f = newFaker()
14+
echo f.ssn()
15+
16+
case f.locale
17+
of "en_US": ssn_en_US.ssn(f)
18+
else: ssn_en_US.ssn(f)

src/faker/provider/ssn/interfaces.nim

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# interfaces はプロシージャの定義のみをまとめたモジュール。
2+
# C言語でいうヘッダファイルのように使用する。
3+
#
4+
# このモジュールをincludeしたモジュールは、このモジュールに定義しているプロシー
5+
# ジャを全て実装しないと、コンパイルが通らない。
6+
7+
import random
8+
import std/strutils
9+
import strformat
10+
import ../../base
11+
export base
12+
13+
proc ssn*(f: Faker): string
14+
proc areaNumber(f: Faker): string
15+
proc groupNumber(f: Faker): string
16+
proc serialNumber(f: Faker): string

src/faker/provider/ssn/ssn_en_US.nim

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
include interfaces
2+
3+
proc areaNumber(f: Faker): string =
4+
var aNum = f.rand.rand(1..899)
5+
if aNum == 666:
6+
(if f.rand.rand(0..1) == 1: inc(aNum) else: dec(aNum))
7+
return fmt"{aNum:>03}"
8+
9+
proc groupNumber(f: Faker): string =
10+
var gNum = f.rand.rand(1..99)
11+
return fmt"{gNum:>02}"
12+
13+
14+
proc serialNumber(f: Faker): string =
15+
let sNum = f.rand.rand(0..9999)
16+
return fmt"{sNum:>04}"
17+
18+
proc ssn*(f: Faker): string =
19+
return [ $areaNumber(f), $groupNumber(f), $serialNumber(f) ].join("-")
20+

tests/test_ssn_en_US.nim

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import std/unittest
2+
import faker
3+
import std/strscans
4+
import strutils
5+
6+
test "SSN":
7+
block:
8+
checkpoint "it generates a valid ssn"
9+
let fake = newFaker()
10+
let ssn = fake.ssn()
11+
let ssnArr = ssn.split("-")
12+
13+
let aNum = ssnArr[0]
14+
let gNum = ssnArr[1]
15+
let sNum = ssnArr[2]
16+
17+
check len(aNum) == 3
18+
check len(gNum) == 2
19+
check len(sNum) == 4
20+
check len(ssn) == 11

0 commit comments

Comments
 (0)