Skip to content

Commit 0ca1e44

Browse files
fix(location): Pad en_US ZIP codes left to 5 characters if needed (#2278)
* fix(location): Pad en_US ZIP codes left to 5 characters if needed * fix NJ and RI * fix PR * updated postcode_by_state to use string patterns --------- Co-authored-by: DivisionByZero <leyla.jaehnig@gmx.de>
1 parent 7f0daf3 commit 0ca1e44

4 files changed

Lines changed: 64 additions & 212 deletions

File tree

src/definitions/location.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ export type LocationDefinition = LocaleEntry<{
77
/**
88
* Postcodes patterns by state
99
*/
10-
postcode_by_state: { [state: string]: { min: number; max: number } };
10+
postcode_by_state: {
11+
[state: string]: string;
12+
};
1113

1214
/**
1315
* Postcodes patterns.
Lines changed: 52 additions & 208 deletions
Original file line numberDiff line numberDiff line change
@@ -1,210 +1,54 @@
11
export default {
2-
AK: {
3-
min: 99501,
4-
max: 99950,
5-
},
6-
AL: {
7-
min: 35004,
8-
max: 36925,
9-
},
10-
AR: {
11-
min: 71601,
12-
max: 72959,
13-
},
14-
AZ: {
15-
min: 85001,
16-
max: 86556,
17-
},
18-
CA: {
19-
min: 90001,
20-
max: 96162,
21-
},
22-
CO: {
23-
min: 80001,
24-
max: 81658,
25-
},
26-
CT: {
27-
min: 6001,
28-
max: 6389,
29-
},
30-
DC: {
31-
min: 20001,
32-
max: 20039,
33-
},
34-
DE: {
35-
min: 19701,
36-
max: 19980,
37-
},
38-
FL: {
39-
min: 32004,
40-
max: 34997,
41-
},
42-
GA: {
43-
min: 30001,
44-
max: 31999,
45-
},
46-
HI: {
47-
min: 96701,
48-
max: 96898,
49-
},
50-
IA: {
51-
min: 50001,
52-
max: 52809,
53-
},
54-
ID: {
55-
min: 83201,
56-
max: 83876,
57-
},
58-
IL: {
59-
min: 60001,
60-
max: 62999,
61-
},
62-
IN: {
63-
min: 46001,
64-
max: 47997,
65-
},
66-
KS: {
67-
min: 66002,
68-
max: 67954,
69-
},
70-
KY: {
71-
min: 40003,
72-
max: 42788,
73-
},
74-
LA: {
75-
min: 70001,
76-
max: 71232,
77-
},
78-
MA: {
79-
min: 1001,
80-
max: 2791,
81-
},
82-
MD: {
83-
min: 20899,
84-
max: 20908,
85-
},
86-
ME: {
87-
min: 3901,
88-
max: 4992,
89-
},
90-
MI: {
91-
min: 48001,
92-
max: 49971,
93-
},
94-
MN: {
95-
min: 55001,
96-
max: 56763,
97-
},
98-
MO: {
99-
min: 63001,
100-
max: 65899,
101-
},
102-
MS: {
103-
min: 38601,
104-
max: 39776,
105-
},
106-
MT: {
107-
min: 59001,
108-
max: 59937,
109-
},
110-
NC: {
111-
min: 27006,
112-
max: 28909,
113-
},
114-
ND: {
115-
min: 58001,
116-
max: 58856,
117-
},
118-
NE: {
119-
min: 68001,
120-
max: 68118,
121-
},
122-
NH: {
123-
min: 3031,
124-
max: 3897,
125-
},
126-
NJ: {
127-
min: 7001,
128-
max: 8989,
129-
},
130-
NM: {
131-
min: 87001,
132-
max: 88441,
133-
},
134-
NV: {
135-
min: 88901,
136-
max: 89883,
137-
},
138-
NY: {
139-
min: 6390,
140-
max: 6390,
141-
},
142-
OH: {
143-
min: 43001,
144-
max: 45999,
145-
},
146-
OK: {
147-
min: 73001,
148-
max: 73199,
149-
},
150-
OR: {
151-
min: 97001,
152-
max: 97920,
153-
},
154-
PA: {
155-
min: 15001,
156-
max: 19640,
157-
},
158-
PR: {
159-
min: 0,
160-
max: 0,
161-
},
162-
RI: {
163-
min: 2801,
164-
max: 2940,
165-
},
166-
SC: {
167-
min: 29001,
168-
max: 29948,
169-
},
170-
SD: {
171-
min: 57001,
172-
max: 57799,
173-
},
174-
TN: {
175-
min: 37010,
176-
max: 38589,
177-
},
178-
TX: {
179-
min: 75503,
180-
max: 79999,
181-
},
182-
UT: {
183-
min: 84001,
184-
max: 84784,
185-
},
186-
VA: {
187-
min: 20040,
188-
max: 20041,
189-
},
190-
VT: {
191-
min: 5001,
192-
max: 5495,
193-
},
194-
WA: {
195-
min: 98001,
196-
max: 99403,
197-
},
198-
WI: {
199-
min: 53001,
200-
max: 54990,
201-
},
202-
WV: {
203-
min: 24701,
204-
max: 26886,
205-
},
206-
WY: {
207-
min: 82001,
208-
max: 83128,
209-
},
2+
AK: '{{number.int({"min": 99501,"max": 99950})}}',
3+
AL: '{{number.int({"min": 35004,"max": 36925})}}',
4+
AR: '{{number.int({"min": 71601,"max": 72959})}}',
5+
AZ: '{{number.int({"min": 85001,"max": 86556})}}',
6+
CA: '{{number.int({"min": 90001,"max": 96162})}}',
7+
CO: '{{number.int({"min": 80001,"max": 81658})}}',
8+
CT: '0{{number.int({"min": 6001,"max": 6389})}}',
9+
DC: '{{number.int({"min": 20001,"max": 20039})}}',
10+
DE: '{{number.int({"min": 19701,"max": 19980})}}',
11+
FL: '{{number.int({"min": 32004,"max": 34997})}}',
12+
GA: '{{number.int({"min": 30001,"max": 31999})}}',
13+
HI: '{{number.int({"min": 96701,"max": 96898})}}',
14+
IA: '{{number.int({"min": 50001,"max": 52809})}}',
15+
ID: '{{number.int({"min": 83201,"max": 83876})}}',
16+
IL: '{{number.int({"min": 60001,"max": 62999})}}',
17+
IN: '{{number.int({"min": 46001,"max": 47997})}}',
18+
KS: '{{number.int({"min": 66002,"max": 67954})}}',
19+
KY: '{{number.int({"min": 40003,"max": 42788})}}',
20+
LA: '{{number.int({"min": 70001,"max": 71232})}}',
21+
MA: '0{{number.int({"min": 1001,"max": 2791})}}',
22+
MD: '{{number.int({"min": 20899,"max": 20908})}}',
23+
ME: '0{{number.int({"min": 3901,"max": 4992})}}',
24+
MI: '{{number.int({"min": 48001,"max": 49971})}}',
25+
MN: '{{number.int({"min": 55001,"max": 56763})}}',
26+
MO: '{{number.int({"min": 63001,"max": 65899})}}',
27+
MS: '{{number.int({"min": 38601,"max": 39776})}}',
28+
MT: '{{number.int({"min": 59001,"max": 59937})}}',
29+
NC: '{{number.int({"min": 27006,"max": 28909})}}',
30+
ND: '{{number.int({"min": 58001,"max": 58856})}}',
31+
NE: '{{number.int({"min": 68001,"max": 68118})}}',
32+
NH: '0{{number.int({"min": 3031,"max": 3897})}}',
33+
NJ: '0{{number.int({"min": 7001,"max": 8989})}}',
34+
NM: '{{number.int({"min": 87001,"max": 88441})}}',
35+
NV: '{{number.int({"min": 88901,"max": 89883})}}',
36+
NY: '0{{number.int({"min": 6390,"max": 6390})}}',
37+
OH: '{{number.int({"min": 43001,"max": 45999})}}',
38+
OK: '{{number.int({"min": 73001,"max": 73199})}}',
39+
OR: '{{number.int({"min": 97001,"max": 97920})}}',
40+
PA: '{{number.int({"min": 15001,"max": 19640})}}',
41+
PR: '00{{number.int({"min": 601,"max": 988})}}',
42+
RI: '0{{number.int({"min": 2801,"max": 2940})}}',
43+
SC: '{{number.int({"min": 29001,"max": 29948})}}',
44+
SD: '{{number.int({"min": 57001,"max": 57799})}}',
45+
TN: '{{number.int({"min": 37010,"max": 38589})}}',
46+
TX: '{{number.int({"min": 75503,"max": 79999})}}',
47+
UT: '{{number.int({"min": 84001,"max": 84784})}}',
48+
VA: '{{number.int({"min": 20040,"max": 20041})}}',
49+
VT: '0{{number.int({"min": 5001,"max": 5495})}}',
50+
WA: '{{number.int({"min": 98001,"max": 99403})}}',
51+
WI: '{{number.int({"min": 53001,"max": 54990})}}',
52+
WV: '{{number.int({"min": 24701,"max": 26886})}}',
53+
WY: '{{number.int({"min": 82001,"max": 83128})}}',
21054
};

src/modules/location/index.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ export class LocationModule {
6565
const { state } = options;
6666

6767
if (state) {
68-
const zipRange = this.faker.definitions.location.postcode_by_state[state];
68+
const zipPattern: string =
69+
this.faker.definitions.location.postcode_by_state[state];
6970

70-
if (zipRange) {
71-
return String(this.faker.number.int(zipRange));
71+
if (zipPattern) {
72+
return this.faker.helpers.fake(zipPattern);
7273
}
7374

7475
throw new FakerError(`No zip code definition found for state "${state}"`);

test/modules/location.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ describe('location', () => {
192192
expect(zipCode1).toBeLessThanOrEqual(upper);
193193
});
194194

195+
it('should return a zip code with length 5 for ZIP codes that start with 0', () => {
196+
const zipCode = fakerEN_US.location.zipCode({ state: 'NH' });
197+
expect(zipCode.length).toBe(5);
198+
});
199+
195200
it('should throw when definitions.location.postcode_by_state not set', () => {
196201
expect(() => faker.location.zipCode({ state: 'XX' })).toThrow(
197202
new FakerError(

0 commit comments

Comments
 (0)