Daily Archive for June 22nd, 2010

Egy nap MouseMove és MouseDown eventjei

Created by IOGraph.

GIRO számlaszám ellenőrző algoritmus

Ma futottam bele egy invalid GIRO számlaszámba - ennek az eredménye a lenti forrás, ami egy bankszámlaszám checksumjait ellenőrzi.
A checksum a nyolcas blokkok 8. digitje, ezt kell kiszámolni. Verbózul ez úgy van, hogy a három nyolcas számblokk 1.-7. karaktereit szépen karakterenként összeszorozzuk sorrendben 9, 7, 3, 1, 9, 7, 3 számokkal (azaz az 1. digitet 9-cel, a 2.-at 7-tel, etc.), majd a szorzatok összegét 10-zel osztva, s az így kapott maradékot 10-ből kivonva áll elő a checksum digit.

Egyszerűbben leírva meg így néz ki:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define INPUTLEN 27
 
int main() {
 
	char szlaszam[INPUTLEN];
	int o, i, digit, sum, cs, cc;
	int mul[] = {9, 7, 3, 1, 9, 7, 3};
 
	printf("GIRO számlaszám 00000000-00000000-00000000 alakban: ");
	fgets(szlaszam, INPUTLEN, stdin);
 
	for (o = 0; o < 19; o += 9) {
 
		sum = 0;
		for (i = 0; i < 7; i++) {
			digit = szlaszam[o + i] - '0';
			sum += digit * mul[i];
		}
		cs = szlaszam[o + 7] - '0';
		cc = 10 - (sum % 10);
 
		printf("checksum: stored =  %d vs calculated = %d -- %sVALID\n", cs, cc, ((cs == cc) ? "" : "IN"));
 
	}
 
	return 0;
}