JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q36819F
  • License MIT

Framework-agnostic TypeScript library for validating German health insurance numbers (KVNR) with official Luhn algorithm - validation only, no generation

Package Exports

  • kvnr-utils
  • kvnr-utils/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (kvnr-utils) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

KVNR Utils

A lightweight TypeScript library for validating and formatting German Health Insurance Numbers (Krankenversichertennummer - KVNR).

Purpose

This library provides validation-only functionality for German Health Insurance Numbers:

  • Format validation: Checks syntax and structure
  • Check digit validation: Verifies mathematical correctness using official Luhn algorithm
  • Input normalization: Handles whitespace and case variations

Features

  • Validates format and check digit using the official modified Luhn algorithm
  • Handles user input with whitespace and case variations
  • Full type definitions included
  • Lightweight with no external dependencies
  • Well-tested with Jest
  • Framework-agnostic (works everywhere JavaScript runs)

Installation

npm install kvnr-utils

Compatibility

This library is framework-agnostic and works with:

  • Vanilla JavaScript/TypeScript (ES2020+)
  • React (any version)
  • Angular (any version)
  • Vue.js (any version)
  • Node.js (v14+)
  • Next.js, Nuxt.js, SvelteKit etc.
  • Webpack, Vite, Rollup - all bundlers
  • Browser & Server-Side environments

No dependencies - works everywhere JavaScript runs!

Usage

import { isValidKVNR, normalizeKVNR } from 'kvnr-utils';

// Validate a KVNR
const isValid = isValidKVNR('A123456780'); // true (if check digit is correct)

// Normalize user input
const normalized = normalizeKVNR(' a123456780 '); // 'A123456780'

Framework Examples

React:

import { isValidKVNR } from 'kvnr-utils';

function KVNRInput() {
  const [kvnr, setKvnr] = useState('');
  const isValid = isValidKVNR(kvnr);
  
  return (
    <input 
      value={kvnr} 
      onChange={(e) => setKvnr(e.target.value)}
      className={isValid ? 'valid' : 'invalid'}
    />
  );
}

Angular:

import { isValidKVNR } from 'kvnr-utils';

@Component({...})
export class KVNRComponent {
  kvnr = '';
  
  get isValid() {
    return isValidKVNR(this.kvnr);
  }
}

KVNR Format

A German Health Insurance Number (KVNR) consists of:

  • Position 1: Random uppercase letter (A-Z, no umlauts)
  • Positions 2-9: Eight random digits
  • Position 10: Check digit calculated using modified Luhn algorithm

Validation Algorithm

This library implements the official German specification for KVNR validation:

  1. Format check: Validates the pattern ^[A-Z][0-9]{9}$
  2. Letter conversion: Converts A-Z to 01-26
  3. Modified Luhn algorithm:
    • Multiply digits alternately with weights 1-2-1-2-1-2-1-2-1-2
    • Calculate cross sum of each product
    • Sum all cross sums
    • Check digit = sum modulo 10

Source: Wikipedia - Krankenversichertennummer

API Reference

isValidKVNR(kvnr: string): boolean

Validates a KVNR string.

  • Parameters: kvnr - The KVNR string to validate
  • Returns: true if valid, false otherwise

normalizeKVNR(kvnr: string): string

Normalizes a KVNR string by trimming whitespace and converting to uppercase.

  • Parameters: kvnr - The raw KVNR string
  • Returns: Normalized KVNR string

Development

# Install dependencies
npm install

# Run tests
npm test

# Build
npm run build

License

MIT © Kevin Mirzaian