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')