diff --git a/README.md b/README.md index f706552..e299c03 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,8 @@ const allColors = cssContent ### Identifiers +- __`einRE`__: Matches a valid EIN number. +- __`ssnRE`__: Matches a valid SSN. Provides 3 matching groups, 1 (area number), 2 (group number), and 3 (serial number). - __`uuidRE`__: Matches a UUID. ### JavaScript diff --git a/src/ids.js b/src/ids.js index 8519cd8..70b35ee 100644 --- a/src/ids.js +++ b/src/ids.js @@ -19,3 +19,14 @@ import { lockdownRE } from './lib/lockdown-re' export const uuidREString = '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}' // Identifiers: Matches a UUID. export const uuidRE = lockdownRE(uuidREString) + +export const ssnREString = '(?!000|666|9\\d\\d)(\\d{3})-?(\\d\\d)-?(?!0000)(\\d{4})' +// Identifiers: Matches a valid SSN. Provides 3 matching groups, 1 (area number), 2 (group number), and 3 (serial number). +export const ssnRE = lockdownRE(ssnREString) + +// https://www.irs.gov/businesses/small-businesses-self-employed/how-eins-are-assigned-and-valid-ein-prefixes +const validEINPrefix = [10, 12, 60, 67, 50, 53, 1, 2, 3, 4, 5, 6, 11, 13, 14, 16, 21, 22, 23, 25, 34, 51, 52, 54, 55, 56, 57, 58, 59, 65, 30, 32, 35, 36, 37, 38, 61, 15, 24, 40, 44, 94, 95, 80, 90, 33, 39, 41, 42, 43, 48, 62, 63, 64, 66, 68, 71, 72, 73, 74, 75, 76, 77, 82, 83, 84, 85, 86, 87, 88, 91, 92, 93, 98, 99, 20, 26, 27, 45, 46, 47, 81, 31].map((prefix) => ('' + prefix).padStart(2, '0')) + +export const einREString = '(?:' + validEINPrefix.join('|') + ')-?\\d{7}' +// Identifiers: Matches a valid EIN number. +export const einRE = lockdownRE(einREString) diff --git a/src/test/data/rfc-2822-date-times.mjs b/src/test/data/rfc-2822-date-times.mjs index c2e50c6..ea2816a 100644 --- a/src/test/data/rfc-2822-date-times.mjs +++ b/src/test/data/rfc-2822-date-times.mjs @@ -54,7 +54,8 @@ export const invalidRFC2822Times = [ export const validRFC2822Dates = [ 'Mon, 7 Jan 1992 12:12', - '6 Jan 1992 12:12 UT' + '6 Jan 1992 12:12 UT', + '6 Jan 1992 12:13:14 UT' ] export const invalidRFC2822Dates = [ diff --git a/src/test/ids.test.js b/src/test/ids.test.js index b004f69..78619b0 100644 --- a/src/test/ids.test.js +++ b/src/test/ids.test.js @@ -17,8 +17,28 @@ limitations under the License. import { groupTest, groupTestPartial } from './lib/test-lib' import * as regex from '../ids' -const validUUID = ['00000000-0000-1000-8000-000000000000'] -const invalidUUID = ['00000000-0000-0000-0000-000000000000'] +const validUUID = [ + '00000000-0000-1000-8000-000000000000', + '00000000-0000-1000-8000-000000abcdef', + '00000000-0000-1000-8000-000000ABCDEF' +] +const invalidUUID = [ + '00000000-0000-0000-0000-000000000000', + '00000000-0000-0000-0000-00000000000G', + '00000000-0000-0000-0000-00000000000g' +] groupTest(regex.uuidRE, validUUID, invalidUUID, 'uuidRE') groupTestPartial(regex.uuidREString, validUUID, invalidUUID, 'uuidRE') + +const validSSN = ['100-00-0001', '123-45-6789', '123-45-0001', '123456789'] +const invalidSSN = ['000-45-6789', '666-45-6789', '900-45-6789', '123-45-0000', '123-45-678'] + +groupTest(regex.ssnRE, validSSN, invalidSSN, 'SSN') +groupTestPartial(regex.ssnREString, validSSN, invalidSSN, 'SSN') + +const validEIN = ['01-3456789', '59-3456789', '123456789'] +const invalidEIN = ['07-3456789', '49-3456789', '12-345678'] + +groupTest(regex.einRE, validEIN, invalidEIN, 'EIN') +groupTestPartial(regex.einREString, validEIN, invalidEIN, 'EIN')