Socket
Socket
Sign inDemoInstall

elfproef

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

elfproef

Implementation of the 11-proof, a mathematical test used by the Dutch government for various digital identification numbers


Version published
Maintainers
1
Created
Source

Elfproef (11-proof)

Travis CI Version Dependencies License


Implementation of the 11-proof, a mathematical test used by the Dutch government for various digital identification numbers


Description

Explanation

Elfproef is Dutch for 11-proof (elf means 11, proef means test). It was originally designed to prevent people from trying to transfer money to a mistyped account number, specifically where either one digit is incorrect, or 2 digits were swapped.

The principle is very simple. First of all, a given number is split into its individual digits. Secondly, those digits are multiplied by their "weight", a multiplier which is based on the position of the digit. Finally, the sum of all multiplied numbers is calculated.

If the result is divisible by 11 and greater than 0, the 11-proof is valid.

Example

A Dutch social security number (BSN) consists of 9 digits and must suffice the 11-proof with weights [9, 8, 7, 6, 5, 4, 3, 2, -1]. Sometimes the BSN can also consist of 8 digits, which is usually converted to 9 digits by adding a leading zero.

For a given BSN ABCDEFGHI, the outcome of the following formula must be divisble by 11 and have no more than one leading zero.

(9 × A) + (8 × B) + (7 × C) + (6 × D) + (5 × E) + (4 × F) + (3 × G) + (2 × H) + (-1 × I)

A valid BSN would be 111222333.

(9 × 1) + (8 × 1) + (7 × 1) + (6 × 2) + (5 × 2) + (4 × 2) + (3 × 3) + (2 × 3) + (-1 × 3) = 66

The result is divisible by 11:

66 > 0 66 ∧ 66 mod 11 = 0

Usage

Installation

yarn add elfproef -E

Example

import { validateBSN } from 'elfproef';

const BSN = "111222333";
const validBSN = validateBSN(BSN);

console.log(validBSN);

Functions

elfProef(input: string | number, weights: number[], positiveSum: boolean): boolean

The first argument is the input string or number which will be tested. The second argument is an array containing the weights which will be used to multiply each digit, which means the length of this array should be equal to the input length. The third argument adds an additional check for making sure the resulting sum is greater than zero, which is not used for the BSN, but was needed for checking dutch banking numbers before the IBAN system was implemented. This functions returns a boolean indicating whether the check was successful.

validateBSN(input: string | number): boolean

This function will validate a BSN as shown in the example above. The input can be either a string or a number, and the return value will be a boolean indicating whether the provided input is a valid BSN.

generateBSN(): string

This function generates a random valid BSN and returns it as a string.

References

License

This project is licensed under the MIT License.

Keywords

FAQs

Package last updated on 05 Oct 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc