### 1 stable release

1.0.0 | Jan 3, 2022 |
---|

#**1643** in Algorithms

**8,046** downloads per month

Used in rs-matter

**BlueOak-1.0.0 OR MIT OR Apache-2.0**

12KB

189 lines

# The Verhoeff algorithm, for number checksums

An implementation of the Verhoeff algorithm.

This checksum algorithm is not particularly common (the simpler and somewhat inferior Luhn algorithm is much more widely used, e.g. in credit card numbers), but it definitely gets some use; for example, India’s Aadhaar biometric identity system uses 12-digit numbers as the ID number, with the final digit being a Verhoeff checksum.

Background reading: https://en.wikipedia.org/wiki/Verhoeff_algorithm

## Examples

`use` `verhoeff``::`Verhoeff`;`
`assert_eq!``(``"`12345`"``.``calculate_verhoeff_check_digit``(``)``,` `1``)``;`
`assert!``(``verhoeff``::`validate`(``&``[``1``,` `2``,` `3``,` `4``,` `5``,` `1``]``)``)``;`
`assert!``(``!``"`123456`"``.``validate_verhoeff_check_digit``(``)``)``;`
`use` `verhoeff``::`VerhoeffMut`;`
`let` `mut` digits `=` `vec!``[``1``,` `2``,` `3``,` `4``,` `5``]``;`
digits`.``push_verhoeff_check_digit``(``)``;`
`assert_eq!``(`digits`,` `[``1``,` `2``,` `3``,` `4``,` `5``,` `1``]``)``;`

## Cargo.toml usage and features

Standard:

`[``dependencies``]`
`verhoeff ``=` `"`1`"`

Disabling the

feature to get `std`

, but retaining `#!``[``no_std``]`

in order to not lose any functionality:`alloc`

`[``dependencies``]`
`verhoeff = { version = "1", default-features = false, features ``=` `[``"`alloc`"``]` }

Disabling the

feature without reenabling `std`

, thereby losing the implementations of `alloc`

(`VerhoeffMut`

) for `push_verhoeff_check_digit`

and `String`

:`Vec``<``u8``>`

`[``dependencies``]`
`verhoeff = { version = "1", default-features ``=` `false` }