/* This file is part of Anastasis Copyright (C) 2020, 2021 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see */ /** * @file reducer/validation_NL_BSN.c * @brief Validation for Dutch Buergerservicenummern * @author Christian Grothoff */ #include #include /** * Function to validate a Dutch Social Security number. * * See https://nl.wikipedia.org/wiki/Burgerservicenummer * * @param bsn_number social security number to validate (input) * @return true if validation passed, else false */ bool NL_BSN_check (const char *bsn_number) { static const int factors[] = { 9, 8, 7, 6, 5, 4, 3, 2, -1 }; unsigned int sum = 0; if (strlen (bsn_number) != 9) return false; for (unsigned int i = 0; i<8; i++) { unsigned char c = (unsigned char) bsn_number[i]; if ( ('0' > c) || ('9' < c) ) return false; sum += (c - '0') * factors[i]; } { unsigned char c = (unsigned char) bsn_number[8]; unsigned int v = (c - '0'); return (sum % 11 == v); } }