Sziasztok,
Nem kapom sehol a „személyi igazolvány szám” validálásának matematikai modelljét. Míg a személyi szám-é megvan a wikipedián is: _http://hu.wikipedia.org/wiki/Szem%C3%A9lyi_sz%C3%A1m
Addig a személyi igazolvány szám validálására nem találok semmit.
Alapvetően nem algoritmust keresek, elég egy matematikai modell is valami törvényben, vagy ilyesmi. De ha algoritmust tudsz, abból vissza tudom fejteni az elméletet.
Hogy ne csak kérjek. Itt van az általam megírt személyi szám validáló. Bárki ingyen használhatja, főleg az aki ad nekem egy magyarországi igazolványszám modellt. Ha azt nem is, legalább egy leírást, vagy valamit.
Kód:
####################################################################
# Az alábbi kód Railshez van, a modellről feltételezzük, hogy: #
# t.string "country" #
# t.string "icard" #
####################################################################
def validate
self.errors.add :icard, "Az általad megadott személyi szám nem érvényes." unless joszemelyi?(self.icard,self.country)
end
def joszemelyi?(icard,orszag)
if orszag == 'Magyarország'
if icard.length == 11
szam = icard.to_i
if ((1..8) === (szam / 10_000_000_000))
x = []
11.downto(1) do |i|
x[i] = (szam % (10 ** i))/(10 ** (i-1))
end
ellenorzoszam = 0
1.upto(10) do |ii|
ellenorzoszam += ii*x[12-ii]
end
return ((ellenorzoszam % 11) == x[1])
else
return false
end
else
return false
end
elsif orszag == 'Románia'
if icard.length == 13
szam = icard.to_i
if ((1..9) === (szam / 1000_000_000_000))
x = []
13.downto(1) do |i|
x[i] = (szam % (10 ** i))/(10 ** (i-1))
end
ellenorzoszam = 0
y = [2,7,9,1,4,6,3,5,8,2,7,9]
1.upto(12) do |ii|
ellenorzoszam += y[ii-1]*x[14-ii]
end
if ellenorzoszam % 11 == 10
return (x[1] == 1)
else
return ((ellenorzoszam % 11) == x[1])
end
else
return false
end
else
return false
end
else
return false
end
end
Könyvjelzők