Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Viitenumeron laskukaava

226 views
Skip to first unread message

MHelle

unread,
Jan 27, 1997, 3:00:00 AM1/27/97
to

Olen hukannut viitenumeron laskukaavan.

Loytyisikohan sita tasta ryhmasta

:) Marko Helle

Marko Nordberg

unread,
Jan 28, 1997, 3:00:00 AM1/28/97
to

>Olen hukannut viitenumeron laskukaavan.
>
>Loytyisikohan sita tasta ryhmasta
>
>:) Marko Helle


Henkilökohtaisesta arkistostani löytyy seuraavaa:

----------------------------------------------------------------------
From: p...@innopoli.ajk.tele.fi (Pekka Nikander)
Newsgroups: sfnet.atk
Subject: Re: Viitenumero
Date: 26 Aug 93 10:06:16

T{m{ ei varmasti ole kaikkein elegantein ratkaisu, mutta tuntuu
toimivan :-)

#!/bin/sh
#
# tee-viite.sh --
#
# Author: Pekka Nikander <p...@innopoli.ajk.tele.fi>
#
# Copyright 1993 by Nixu Oy, Helsinki, Finland
#
# Created: Wed Jun 2 12:15:42 1993
# Last modified: Thu Aug 5 16:42:05 1993 pnr
#

case $# in
1) VIITE1=$1;;
*) echo "Usage: $0 number"
exit 1;;
esac

PERUS="$VIITE1"
SUM=0
MUL=7

while [ -n "$PERUS" ]; do
DIGIT=`expr "$PERUS" : '.*\(.\)'`
PERUS=`expr "$PERUS" : '\(.*\).'`
SUM=`expr $SUM + $MUL '*' $DIGIT`
case $MUL in
7) MUL=3;;
3) MUL=1;;
1) MUL=7;;
*) echo "$0: error: bad MUL=$MUL"; exit 1;;
esac
done

VIITE2=`expr 10 - $SUM % 10`
if [ $VIITE2 -eq 10 ]; then
VIITE2=0
fi

echo "$VIITE1$VIITE2" |
awk '{ len=length($0);
if (len % 5 != 0) {
printf("%s ", substr($0, 0, len % 5))
}
for (s = len % 5 + 1; s < len; s += 5)
printf("%s ", substr($0, s, 5));
printf("\n");
}

--
Pekka Nikander Internet: p...@ajk.tele.fi -or-
Telecom Finland Pekka.N...@ajk.tele.fi

----------------------------------------------------------------------
From: pr...@cc.Helsinki.FI (Jarkko J Priha)
Newsgroups: sfnet.atk.ohjelmointi
Subject: Re: Pankkisiirtojen viitenumeron tarkistussumma?
Date: 7 Jul 1995 22:19:21 GMT

Olli Hämäläinen (ol...@mail.freenet.hut.fi) wrote:
: Edellisessä artikkelissa jma...@teeri.jmp.fi (Jukka Marin) sanoo:

: >Viitenumeron numerot vasemmalta oikealle kerrotaan luvuilla 7,3,1,7,3,1,,,
: >(siis eka kerrotaan seiskalla, toka kolmosella ja kolmas ykkösellä jne)
: >kertolaskujen tulokset lasketaan yhteen, summan viimeinen numero
: >vähennetään luvusta 10 ja saatu numero on kyseinen tarkistusmerkki (10 = 0)

: Joo kyllä toi on se oikea algoritmi muuten, mutta kertoimet menevät
: (muistaakseni) oikealta vasemmalle, niin että oikeanpuolimmaisin kerro-
: taan luvulla 7. Muistanko aivan väärin? Asian voisi tarkistaa SPY:n
: julkaisusta "Tilisiirtolomakkeen rakenneohje", jonka saa pankista
: ilmaiseksi.

Julkaisusta "Tilisiirto-opas 11.1.1993" (Suomen Pankkiyhdistys):

Viitenumeron tarkiste:
Viitenumeron tarkiste muodostetaan seuraavasti:
- tarkistettavan viitteen numero kerrotaan oikealta vasemmalle
painoarvoilla 7,3,1,7,3,1...
- kertotulot lasketaan yhteen ja summa vähennetään seuraavasta
täydestä kymmenestä
- erotus on tarkiste, joka tulostetaan viitteen viimeiseksi
numerokso


- Jarkko

----------------------------------------------------------------------
From: pe...@lk-hp-11.hut.fi (timo.pelkonen)
Newsgroups: sfnet.atk.ohjelmointi
Subject: Re: Pankkisiirtojen viitenumeron tarkistussumma?
Date: 9 Jul 95 10:51:35 GMT

>Julkaisusta "Tilisiirto-opas 11.1.1993" (Suomen Pankkiyhdistys):

> mums mums ..<

sama awkiksi. pv: perlillä saanee siistimmän, ja miksei awkillakin :)
kokeiltu kahdella viitenumerolla, joten sen on pakko toimia.

# awk-kludge viitenumeron laskemiseksi. PublicDomain. timo.p...@hut.fi

BEGIN { # kertoimet
k[0]=7
k[1]=3
k[2]=1
}

{
i=length ;
check=0;
n=0;

while(i) {
x=substr($0,i,1);
i--;
if(index("0123456789",x)) { # oli nro
check+=x*k[n] ;
# print x " * " k[n] " = " x*k[n] " check: " check ; # debug
n++;
if(n==3) n=0;
}
}

tmp=substr(check, length(check), 1);
if(tmp+0) tmp=10-tmp;
print tmp ;
}


--
timo.p...@hut.fi

----------------------------------------------------------------------
From: ol...@mail.freenet.hut.fi (Olli Hämäläinen)
Newsgroups: sfnet.atk.ohjelmointi
Subject: Re: Pankkisiirtojen viitenumeron tarkistussumma?
Date: 9 Jul 1995 14:19:50 GMT

Edellisessä artikkelissa pr...@cc.Helsinki.FI (Jarkko J Priha) sanoo:

SPY:n julkaisusta:
> Viitenumeron tarkiste muodostetaan seuraavasti:
> - tarkistettavan viitteen numero kerrotaan oikealta vasemmalle
> painoarvoilla 7,3,1,7,3,1...
> - kertotulot lasketaan yhteen ja summa vähennetään seuraavasta
> täydestä kymmenestä
> - erotus on tarkiste, joka tulostetaan viitteen viimeiseksi
> numerokso


Tässä olisi tuon pohjalta rakennettu Pascal-funktio (kirjoitettu Micro-
softin QuickPascalille, joten ei alivan standardipascalia). Kirjoitin
sen muistinvaraisesti, testattu alkuperäinen on kotona, minä taas en.8)
Näin ollen pikkubugeja saattaa löytyä.

Lisäyksenä vielä: viitenumeron enimmäispituus on 19 numeromerkkiä ilman
tarkistetta. Vähimmäispituus 2 (viitetieto) + 1 (tarkiste) eli yhteensä
kolme merkkiä. Allaoleva funktio ei tarkista näitä.

Olli Hämäläisen tunnuksella teknisistä syistä kirjoittaa

Antti-Juhani Kaijanaho,

vieläkin.

LIITE:

function Tarkiste ( pankkiviite : string ) : integer;
{ Public domain. Syöttötieto on pankkiviite ilman viitenumeroa.
Palauttaa tarkisteen. }

var digit : integer;
sum : integer;
temp : integer;
weight : integer;

begin
sum := 0; weight := 7;

while pankkiviite <> '' do begin

if pankkiviite[Length(pankkiviite)] in ['0' .. '9'] then
Value ( pankkiviite[Length(pankkiviite)], digit, temp);
else begin
digit := 0;
writeln ( 'Viitenumero saa sisältää vain numeromerkkejä.' )
end;
sum := sum + weight*digit;
Delete(pankkiviite, Length(pankkiviite), 1);

case weight of
7 : weight := 3;
3 : weight := 1;
1 : weight := 7;
end

end;

Tarkiste := (10 - (sum mod 10)) mod 10

end;

----------------------------------------------------------------------
From news.cs.tut.fi!news.funet.fi!uwasa.fi!chyde!t2r Fri Dec 3 08:37:03 EET 1993

In article <jrasinma....@silvia.helsinki.fi> jras...@silvia.helsinki.fi (JUSSI RASINMŽKI (MMEKO_OPISK)) writes:

>Muistelen joskus lukeneeni t{{lt{ ohjeet viitepankkisiirron viitenumeron
>laskemisalgoritmiksi. Eip{ silloin tullut laitettua muistiin, joten
>muistaako kukkaan ?

Ohessa kompelo ohjelma c:lla joka laskee viitenumeron. Asia selvinnee
siita??

Eli viitenumeroa l{hdet{{n kelaamaan lopusta p{in, siten ett{ luku
kerrallaan kerrotaan 7, 3 tai 1:ll{. Tulot summataan ja summa
v{hennet{{n seuraavasta kymmenest{. Oheinen esimerkki varmaan
selvitt{{ paremmin kuin t{m{ teksti???

1 2 3 4 2
* * * * *
3 7 1 3 7
+----------
3+14+4+7+9=37

40-37 = 3

tommppa2

<clip><clip>

#include <stdio.h>
#include <string.h>

int aa(mrk)
int mrk;
{
return (mrk-'a');
}

static char mask[]="7137137137137137137137";
main()
{
int i;
char j,k;
long ch;

char str[21];
ch = 0;
printf("\nAnna viitenumero :");
scanf("%s",str);


for (i=strlen(str)-1;i>-1;i--)
ch = ch + (str[i]-'0')*(mask[i]-'0');
ch = ((int) (ch+9)/10)*10-ch;
printf("\nTarkistusnumero on :%d",ch);
printf("\nJoten koko viitenumero on :%s%1d\n",str,ch);
return;
}


----------------------------------------------------------------------
Date: 26 Aug 93 06:21:17 GMT
Newsgroups: sfnet.atk
Subject: Re: Viitenumero
From: a...@th.tele.fi (Allu Helenius)

antti...@compart.fi (Antti Roine) writes:

> Kuinka viitenumero lasketaan? (pankissa eiv{t tienneet/kertoneet)

Tein joskus omaksi ilokseni oheisen perl-p{tk{n. Jos siit{ on jollekin
muullekin iloa, niin siit{ vaan. (En ota vastuuta mist{{n jne.)

K{ytt|: pankkiviite <numero, jolle halutaan viitenumero>
Esim: pankkiviite 313 --> 3133

Allu
--
Allu Helenius, TELE Tietohallintopalvelut

Windows/NT - From the people who brought you EDLIN

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/usr/bin/perl
# $Id$ Allu Helenius 1993
#
# Pankkisiirron viitenumeron tarkistaminen.

@cnum = ( 7, 3, 1);

$viite = &viite("@ARGV");
print "$viite\n";

sub viite {
local($viite) = @_;

local($sum) = 0;
local($c) = 0;
local($v) = "";
local($tark);

foreach $i (reverse split(/[^0-9]*/,$viite)) {
$sum += $cnum[$c] * $i;
$c = ( $c+1 ) % @cnum;
$v .= $i;
}
$tark = ( 10 - $sum%10 ) % 10;
$v = "$tark$v";
$v =~ s/(.....)/$1 /g;
$v =~ s/[0 ]+$//;
reverse $v;
}

----------------------------------------------------------------------

Seuraavaksi kysytään henkilötunnuksen tarkistusosan laskukaavaa (ja
sen jälkeen viikonnumeroa ja päivää):

/*
* sotu.c 11.7.1994 pam
*/

#include <stdio.h>

void
main(void)
{
long t;

printf("Sotu: ");
scanf("%ld", &t);
printf("\n%ld%c\n",t,"0123456789ABCDEFHJKLMNPRSTUVWXY"[t%31]);
}
----------------------------------------------------------------------

#!/usr/local/bin/perl

print "henkilötunnus ilman tarkiste- ja välimerkkiä (ppkkvvxxx): ";
chomp($t = <STDIN>);
print $t . substr('0123456789ABCDEFHJKLMNPRSTUVWXY', $t % 31, 1)."\n";

----------------------------------------------------------------------

Joko henkilötunnuksen välimerkki on päätetty vuodelle 2000? Viimeksi
muistan kuulleeni, että "+"-merkki ei ole enää vahva ehdokas vaan
ehdolla olisi A-kirjain.

--
-- Marko Nordberg, Somewhere in USA, http://www.cs.tut.fi/~mn87537/

Matti Viskari

unread,
Mar 6, 1997, 3:00:00 AM3/6/97
to

>#include <stdio.h>
>#include <string.h>
>
>int aa(mrk)
>int mrk;
>{
> return (mrk-'a');
>}
>
>static char mask[]="7137137137137137137137";
>main()
>{
> int i;
> char j,k;
> long ch;
>
> char str[21];
> ch = 0;
> printf("\nAnna viitenumero :");
> scanf("%s",str);
>
>
> for (i=strlen(str)-1;i>-1;i--)
> ch = ch + (str[i]-'0')*(mask[i]-'0');
> ch = ((int) (ch+9)/10)*10-ch;
> printf("\nTarkistusnumero on :%d",ch);
> printf("\nJoten koko viitenumero on :%s%1d\n",str,ch);
> return;
>}
>

Kokeilin tätä ja aina antaa tarkistusnumeroksi 0 (nollan) ???
Mistä moinen ??

-- Matti

0 new messages