3.1.0 • Published 4 months ago

kennitala v3.1.0

Weekly downloads
737
License
MIT
Repository
github
Last release
4 months ago

Kennitala

Icelandic national ID (kennitölur) utilities for servers and clients. Now with TypeScript support!

Build Status npm npm npm bundle size

Install with npm:

npm install kennitala

Examples

import { isValid } from "kennitala";

// Check if a kennitala is valid for either a person or a company
isValid("3108962099"); // returns true
isValid("8281249124"); // returns false

Heads Up for Storing in Databases

This library validates kennitölur both with - spacers and without, so remember to sanitize your kennitala before storing it in a database!

You can use the included sanitize function:

import { sanitize } from "kennitala";

const sanitizedKennitala = sanitize("310896-2099");
// returns '3108962099'

More Examples

import {
  isValid,
  isPerson,
  isCompany,
  formatKennitala,
  info,
  generatePerson,
  generateCompany,
} from 'kennitala';

// Get detailed information about a kennitala
const kennitalaInfo = info('3108962099');
// kennitalaInfo contains:
{
  kt: '3108962099',
  valid: true,
  type: 'person',
  birthday: new Date('1996-08-31T00:00:00.000Z'),
  birthdayReadable: 'Sat Aug 31 1996',
  age: 27,
}

// Check if a kennitala is valid for a person (returns false for companies)
isPerson('3108962099');            // returns true
isPerson('601010-0890');           // returns false (invalid date)
isPerson(3108962099);              // returns false (invalid input type)
isPerson('31^_^08!!96LOL20T_T99'); // returns false (invalid format)

// Check if a kennitala is valid for a company (returns false for persons)
isCompany('6010100890');  // returns true
isCompany('601010-0890'); // returns true
isCompany('3108962099');  // returns false

// Format a kennitala by adding a traditional '-' spacer
formatKennitala('3108962099');       // returns '310896-2099'
formatKennitala('3108962099', false); // returns '3108962099'

API Documentation

Below is the API based on the type definitions from the refactored TypeScript library.

isValid(kennitala: string): boolean

Checks if the kennitala checksum is correct for either a person or company. Non-digit characters are removed before validation.

  • Parameters:

    • kennitala: The kennitala string to validate.
  • Returns: true if the kennitala is valid, false otherwise.

isPerson(kennitala: string): boolean

Checks if the kennitala is valid for a person. The day of birth must be between 1-31. Non-digit characters are removed before validation.

  • Parameters:

    • kennitala: The kennitala string to validate.
  • Returns: true if the kennitala is valid for a person, false otherwise.

isCompany(kennitala: string): boolean

Checks if the kennitala is valid for a company. The day of birth must be between 41-71. Non-digit characters are removed before validation.

  • Parameters:

    • kennitala: The kennitala string to validate.
  • Returns: true if the kennitala is valid for a company, false otherwise.

isTemporary(kennitala: string): boolean

Checks if the kennitala is a valid temporary ID.

  • Parameters:

    • kennitala: The kennitala string to validate.
  • Returns: true if the kennitala is a valid temporary ID, false otherwise.

sanitize(kennitala: string): string

Sanitizes the input by removing all non-digit characters.

  • Parameters:

    • kennitala: The kennitala string to sanitize.
  • Returns: The sanitized kennitala string if input is valid, otherwise returns the kennitala string unchanged.

formatKennitala(kennitala: string, spacer?: boolean): string

Formats the kennitala by adding a - spacer between the 6th and 7th digits. Does not validate the input.

  • Parameters:

    • kennitala: The kennitala string to format.
    • spacer (optional): Includes a - spacer character by default.
  • Returns: The formatted kennitala string.

info(kennitala: string): KennitalaInfo | undefined

Returns an object containing information about the kennitala.

  • Parameters:

    • kennitala: The kennitala string to analyze.
  • Returns: An object of type KennitalaInfo if valid, undefined otherwise.

KennitalaInfo Type Definition:

interface KennitalaInfo {
  kt: string; // The sanitized kennitala
  valid: boolean; // Whether the kennitala is valid
  type: "person" | "company" | "temporary" | "invalid"; // Type of kennitala
  age?: number; // Age calculated from the birthday (if applicable)
  birthday?: Date; // Date object representing the birthday (if applicable)
  birthdayReadable?: string; // Human-readable date string (if applicable)
}

generatePerson(date: Date, startingIncrement = 20): string

Generates a valid kennitala for a person based on a Date object to specify the birth date.

  • Parameters:

    • date: The birth date to use for generating the kennitala.
    • startingIncrement: The starting increment for digits 7 and 8 (default: 20).
  • Returns: A valid kennitala string.

generateCompany(date: Date): string

Generates a valid kennitala for a company based on a Date object to specify the registration date.

  • Parameters:

    • date: The date to use for generating the company kennitala.
  • Returns: A valid kennitala string.

Testing

The library uses Jest for testing. To run the tests, use:

npm test

Building

To build the project, run:

npm run build

This will compile the TypeScript code and place the output in the dist/ folder.

2.0.3

8 months ago

2.0.2

8 months ago

2.0.5

8 months ago

2.0.4

8 months ago

2.0.6

8 months ago

2.0.1

8 months ago

2.0.0-beta.4

8 months ago

2.0.0

8 months ago

3.0.3

4 months ago

3.0.2

5 months ago

3.1.0

4 months ago

3.0.1

5 months ago

3.0.0

6 months ago

2.0.0-beta.3

2 years ago

2.0.0-beta.2

3 years ago

2.0.0-beta.1

3 years ago

2.0.0-beta.0

3 years ago

1.2.6

4 years ago

1.2.5

4 years ago

1.2.4

5 years ago

1.2.3

6 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.2.0

8 years ago

1.1.0

9 years ago

1.0.9

10 years ago

1.0.8

10 years ago

1.0.7

10 years ago

1.0.6

10 years ago

1.0.5

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago