Skip to content

Commit

Permalink
feat: New Validation fns
Browse files Browse the repository at this point in the history
Added base64, ean, mac, pan, passport, sin and tin validation functions.
  • Loading branch information
Kathuria committed Jan 13, 2025
1 parent 47485c0 commit 2e508c9
Show file tree
Hide file tree
Showing 20 changed files with 788 additions and 149 deletions.
26 changes: 13 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,30 @@ This package includes various categorised validators which can be helppful for v

### Identification and Financial Numbers:
1. **Credit Card Number**: Validate using the Luhn algorithm.
2. **Passport Number**: Support formats for multiple countries. (Upcoming)
2. **Passport Number**: Support formats for multiple countries.
3. **Aadhaar**: Validites Indian Identity numbers using specific patterns.
4. **TIN/EIN**: Validate Taxpayer Identification Number (TIN) or Employer Identification Number (EIN). (Upcoming)
4. **TIN/EIN**: Validate Taxpayer Identification Number (TIN) or Employer Identification Number (EIN).

### Contact Information:
5. **Postal/ZIP Code**: Validate based on country-specific formats. It supports top 25 countries based on ISO 3166-1 alpha-2 codes namely: US, CN, IN, ID, PK, BR, NG, BD, RU, MX, JP, ET, PH, EG, VN, CD, TR, IR, DE, TH, GB, FR, IT, TZ, ZA.

### Personal Information:
6. **Date of Birth**: Validate format and ensure the person’s age falls within a reasonable range. (Upcoming)
7. **Email**: Validate email addresses which conform to standard formats.
6. **Email**: Validate email addresses which conform to standard formats.

### Internet/Network:
8. **IP Address**: Validate IPv4 and IPv6 formats.
9. **URL**: Validate structure and it supports URLs with and without protocols, and it handles query parameters and fragments.
10. **MAC Address**: Validate for networking hardware.(Upcoming)
7. **IP Address**: Validate IPv4 and IPv6 formats.
8. **URL**: Validate structure and it supports URLs with and without protocols, and it handles query parameters and fragments.
9. **MAC Address**: Validate for networking hardware.

### Document Validation:
11. **PAN (Permanent Account Number)**: For Indian tax records.(Upcoming)
12. **Social Security Number (SSN)**: Validates U.S. Social Security Numbers based on predefined rules.
13. **Social Insurance Number (SIN)**: For Canada or equivalent in other countries. (Upcoming)
10. **PAN (Permanent Account Number)**: For Indian tax records.
11. **Social Security Number (SSN)**: Validates U.S. Social Security Numbers based on predefined rules.
12. **Social Insurance Number (SIN)**: For Canada or equivalent in other countries.

### Formats and Patterns:
14. **File Extensions**: Validate file names/extensions (e.g., `.jpg`, `.pdf`).
13. **File Extensions**: Validate file names/extensions (e.g., `.jpg`, `.pdf`).

### Additional Utility:
15. **Hex Color Codes**: Validate `#RRGGBB` or `#RGB` color formats.
16. **EAN/UPC**: Validate international product codes. (Upcoming)
14. **Hex Color Codes**: Validate `#RRGGBB` or `#RGB` color formats.
15. **EAN/UPC**: Validate international product codes.
16. **Base64**: Validate for Base64 encoded string.
74 changes: 67 additions & 7 deletions USAGE_DETAILS.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ console.log(isValid_Aadhaar_Number(aadhaarNumber)); // Output: true if valid, fa

```typescript
import { isValid_Credit_Card } from 'validate-functions/credit-card';

const creditCardNumber = '4539 1488 0343 6467'; // Example of a valid Visa card number
valid Visa card number
console.log(isValid_Credit_Card(creditCardNumber)); // Output: true if valid, false otherwise
```

Expand All @@ -59,17 +58,15 @@ console.log(isValid_IPv6(ipv6Address)); // Output: true if valid, false otherwis
```typescript
import { isValid_Hex_Color } from 'validate-functions/hex-code';

const hexColor = '#abc'; // Example of a valid 3-digit hex color
console.log(isValid_Hex_Color(hexColor)); // Output: true if valid, false otherwise

const hexColor6 = '#abcdef'; // Example of a valid 6-digit hex color
console.log(isValid_Hex_Color(hexColor6)); // Output: true if valid, false otherwise
```

- **isValid_Postal_Code**

```typescript
import { isValid_Postal_Code, CountryCode } from 'validate-functions/postal-zip';
import { isValid_Postal_Code, CountryCode } from 'validate-functions/postal';

// India
const indianPostalCode = '110001';
Expand All @@ -81,7 +78,6 @@ console.log(isValid_Postal_Code(indianPostalCode, CountryCode.IN)); // Output: t
```typescript
import { isValid_URL } from 'validate-functions/url';

// Example of a URL with query parameters
const urlWithQuery = 'http://example.com?name=value';
console.log(isValid_URL(urlWithQuery)); // Output: true
```
Expand All @@ -91,8 +87,72 @@ console.log(isValid_URL(urlWithQuery)); // Output: true
```typescript
import { isValid_File_Extension } from 'validate-functions/file-extension';

// Example of checking a file extension
const fileName = 'document.pdf';
const allowedExtensions = ['pdf', 'doc', 'txt'];
console.log(isValid_File_Extension(fileName, allowedExtensions)); // Output: true if the extension is valid, false otherwise
```

- **isValid_Base64**

```typescript
import { isValid_Base64 } from 'validate-functions/base64';

const base64String = 'U29mdHdhcmUgRW5naW5lZXJpbmc=';
console.log(isValid_Base64(base64String)); // Output: true if valid, false otherwise
```

- **isValid_EAN_UPC**

```typescript
import { isValid_EAN_UPC } from 'validate-functions/ean-uac-code';

const eanUpcCode = '123456789012';
console.log(isValid_EAN_UPC(eanUpcCode)); // Output: true if valid, false otherwise
```

- **isValid_MAC_Address**

```typescript
import { isValid_MAC_Address } from 'validate-functions/mac-address';

const macAddress = '01:23:45:67:89:AB';
console.log(isValid_MAC_Address(macAddress)); // Output: true if valid, false otherwise
```

- **isValid_PAN**

```typescript
import { isValid_PAN } from 'validate-functions/pan';

const panNumber = 'ABCDE1234F';
console.log(isValid_PAN(panNumber)); // Output: true if valid, false otherwise
```

- **isValid_SIN**

```typescript
import { isValid_SIN } from 'validate-functions/sin';

const sinNumber = '123 456 782';
console.log(isValid_SIN(sinNumber)); // Output: true if valid, false otherwise
```

- **isValid_TIN**

```typescript
import { isValid_TIN, CountryCode } from 'validate-functions/tin';

// Example for USA
const einNumber = '12-3456789';
console.log(isValid_TIN(einNumber, CountryCode.USA)); // Output: true if valid, false otherwise
```

- **isValid_Passport_Number**

```typescript
import { isValid_Passport_Number, CountryCode } from 'validate-functions/passport-number';

// Example for USA
const passportNumber = 'A1234567';
console.log(isValid_Passport_Number(passportNumber, CountryCode.USA)); // Output: true if valid, false otherwise
```
33 changes: 33 additions & 0 deletions src/__tests__/base64.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { isValid_Base64 } from '../base64';

describe('Base64 Validation', () => {
it('should return true for a valid Base64 string', () => {
const validBase64 = 'U29mdHdhcmUgRW5naW5lZXJpbmc=';
expect(isValid_Base64(validBase64)).toBe(true);
});

it('should return true for a valid Base64 string with padding', () => {
const validBase64WithPadding = 'U29mdHdhcmU=';
expect(isValid_Base64(validBase64WithPadding)).toBe(true);
});

it('should return false for an invalid Base64 string with invalid characters', () => {
const invalidBase64 = 'U29mdHdhcmU$';
expect(isValid_Base64(invalidBase64)).toBe(false);
});

it('should return false for a string with incorrect Base64 padding', () => {
const incorrectPadding = 'U29mdHdhcmU==';
expect(isValid_Base64(incorrectPadding)).toBe(false);
});

it('should return true for an empty string (considered valid Base64)', () => {
const emptyString = '';
expect(isValid_Base64(emptyString)).toBe(true);
});

it('should return false for a non-Base64 string', () => {
const nonBase64 = 'Hello, World!';
expect(isValid_Base64(nonBase64)).toBe(false);
});
});
38 changes: 38 additions & 0 deletions src/__tests__/ean-uac-code.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { isValid_EAN_UPC } from '../ean-uac-code';

describe('EAN/UPC Code Validation', () => {
it('should return true for a valid 8-digit UPC code', () => {
const validUPC8 = '12345678';
expect(isValid_EAN_UPC(validUPC8)).toBe(true);
});

it('should return true for a valid 12-digit UPC code', () => {
const validUPC12 = '123456789012';
expect(isValid_EAN_UPC(validUPC12)).toBe(true);
});

it('should return true for a valid 13-digit EAN code', () => {
const validEAN13 = '1234567890123';
expect(isValid_EAN_UPC(validEAN13)).toBe(true);
});

it('should return false for a code with less than 8 digits', () => {
const shortCode = '1234567';
expect(isValid_EAN_UPC(shortCode)).toBe(false);
});

it('should return false for a code with more than 13 digits', () => {
const longCode = '12345678901234';
expect(isValid_EAN_UPC(longCode)).toBe(false);
});

it('should return false for a code with non-numeric characters', () => {
const nonNumericCode = '12345A789012';
expect(isValid_EAN_UPC(nonNumericCode)).toBe(false);
});

it('should return false for an empty string', () => {
const emptyString = '';
expect(isValid_EAN_UPC(emptyString)).toBe(false);
});
});
33 changes: 33 additions & 0 deletions src/__tests__/mac-address.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { isValid_MAC_Address } from '../mac-address';

describe('MAC Address Validation', () => {
it('should return true for a valid MAC address', () => {
const validMAC = '01:23:45:67:89:AB';
expect(isValid_MAC_Address(validMAC)).toBe(true);
});

it('should return true for a valid MAC address with lowercase letters', () => {
const validMACLower = '01:23:45:67:89:ab';
expect(isValid_MAC_Address(validMACLower)).toBe(true);
});

it('should return false for a MAC address with invalid characters', () => {
const invalidMACChars = '01:23:45:67:89:ZZ';
expect(isValid_MAC_Address(invalidMACChars)).toBe(false);
});

it('should return false for a MAC address with incorrect length', () => {
const shortMAC = '01:23:45:67:89';
expect(isValid_MAC_Address(shortMAC)).toBe(false);
});

it('should return false for a MAC address with incorrect delimiter', () => {
const invalidDelimiterMAC = '01-23-45-67-89-AB';
expect(isValid_MAC_Address(invalidDelimiterMAC)).toBe(false);
});

it('should return false for an empty string', () => {
const emptyString = '';
expect(isValid_MAC_Address(emptyString)).toBe(false);
});
});
33 changes: 33 additions & 0 deletions src/__tests__/pan.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { isValid_PAN } from '../pan';

describe('PAN Validation', () => {
it('should return true for a valid PAN', () => {
const validPAN = 'ABCDE1234F';
expect(isValid_PAN(validPAN)).toBe(true);
});

it('should return false for a PAN with incorrect letter count', () => {
const invalidPANLetters = 'ABCD1234F';
expect(isValid_PAN(invalidPANLetters)).toBe(false);
});

it('should return false for a PAN with incorrect digit count', () => {
const invalidPANDigits = 'ABCDE123F';
expect(isValid_PAN(invalidPANDigits)).toBe(false);
});

it('should return false for a PAN with lowercase letters', () => {
const invalidPANLowercase = 'abcde1234f';
expect(isValid_PAN(invalidPANLowercase)).toBe(false);
});

it('should return false for a PAN with special characters', () => {
const invalidPANSpecialChars = 'ABCD@1234F';
expect(isValid_PAN(invalidPANSpecialChars)).toBe(false);
});

it('should return false for an empty string', () => {
const emptyString = '';
expect(isValid_PAN(emptyString)).toBe(false);
});
});
Loading

0 comments on commit 2e508c9

Please sign in to comment.