Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06.06.2011, 11:53   #1 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard Ist der Ausweis gültig?

Mit dem kleinen Progrämmchen in XProfan11 kann die untere, maschinenlesbare Zeile des deutschen Personalausweises geprüft werden. Einfach die Angaben entsprechend in die 4 Editfelder eintippen und dann auf "Testen" klicken.
Auf Wunsch kann auch die am Programmanfang stehende Konstante %MinOld auf ein Mindestalter gesetzt sein, dann erfolgt zusätzlich eine Altersprüfung des Ausweisinhabers.
Für die ernsthafte Anwendung sollte die Auswertung geändert werden, damit das Programm nicht so geschätzig ist. Ein eventueller Betrüger soll ja keine Hinweise erhalten, woran man ihn entlarvt hat.

Code:
$H Windows.PH

Declare Edit1%, Edit2%, Edit3%, Edit4%, Button%, Ende%, Titel$
Def %MinOld 0  ' Alterangabe in Jahren, wenn Alterprüfung erfolgen soll, ansonsten %MinOld = 0
Titel$ = "Ausweis-Test"


Proc BlockTest ' Prüft Blöcke auf gültige Länge und Prüfziffer
  Parameters _Zeile$, _IsLen%
  Declare _Len%, _Z%, _S%, _F%, _OrgPruef%
  _F% = 7
  _Zeile$ = Trim$(_Zeile$)
  _Len% = Len(_Zeile$)
  If _Len%
    If _IsLen% < 0
      Case _Len% < Abs(_IsLen%) : Return 9
    ElseIf _Islen%
      Case _Len% <> _Islen% : Return 9
    EndIf
    WhileNot _Z%  ' Sucht von rechts letzte Ziffer
      _OrgPruef% = Ord(Mid$(_Zeile$, _Len%, 1))
      ' Damit nur Ziffernzeichen berücksichtigt werden
      Dec _Len%
      Case (_OrgPruef% < 58) And (_OrgPruef% > 47) : _Z% = 1
    EndWhile
    _OrgPruef% = _OrgPruef% - 48  ' letzte Ziffer ist Prüfzahl
    WhileLoop _Len%
      _Z% = Ord(Mid$(_Zeile$, &Loop, 1))
      ' Damit nur Ziffernzeichen berücksichtigt werden
      If (_Z% < 58) And (_Z% > 47)
        _Z% = _Z% - 48
        _S% = _S% + _Z% * _F%
        If _F% = 7 
         _F% = 3
        ElseIf _F% = 3
          _F% = 1
        ElseIf _F% = 1
          _F% = 7
        EndIf
      EndIf
    EndWhile
    ' letzte Ziffer aus Summe nach S% ermitteln
    _F% = (_S% \ 10) * 10
    _S% = _S% - _F%
  Else
    _OrgPruef% = -1
  EndIf
  _S% = _S% - _OrgPruef%  ' Differenz aus Prüfzahl und letzte Ziffer der Summe muß 0 sein
  Return _S%
EndProc

Proc DateTest ' Testet Datumsangaben auf Gültigkeit
  Parameters _Date$
  Declare _Y%, _M%, _D%, _DR%, _Err%
  _Y% = Val(Mid$(_Date$, 1, 2))
  _M% = Val(Mid$(_Date$, 3, 2))
  _D% = Val(Mid$(_Date$, 5, 2))
  ' Schaltjahr ermitteln
  ' wegen der 2-stelligen Jahresdarstellung vereinfacht
  ' jedes volle Jahrhundert wird als Schaltjahr behandelt
  _Y% = _Y% + 100
  If _Y% = 4 * (_Y% \ 4)
    _DR% = 29
  Else
    _DR% = 28
  EndIf
  If (_M% > 0) And (_M% < 13)
    If _D% > 0
      Select _M%
        CaseOf 1, 3, 5, 7, 8, 10, 12
          Case _D% > 31 : _Err% = 2
        CaseOf 2
          Case _D% > _DR% : _Err% = 2
        OtherWise
          Case _D% > 30 : _Err% = 2
      EndSelect
    Else
      _Err% = 2 ' ungültiger Tag
    EndIf
  Else
    _Err% = 1 ' ungültiger Monat
  EndIf
  Return _Err%
EndProc

Proc FromToTest ' Testet die Gültigkeitsdauer
  Parameters _Date$
  Declare _Y%, _M%, _D%, _YRef%, _MRef%, _DRef%, _RefDate$, _Err%
  _Y% = Val(Mid$(_Date$, 1, 2))
  _M% = Val(Mid$(_Date$, 3, 2))
  _D% = Val(Mid$(_Date$, 5, 2))
  _RefDate$ = Date$(3)
  _YRef% = Val(Mid$(_RefDate$, 3, 2))
  _MRef% = Val(Mid$(_RefDate$, 5, 2))
  _DRef% = Val(Mid$(_RefDate$, 7, 2))
  If _Y% < _YRef%
    _Err% = 1     ' Jahr abgelaufen
  ElseIf _Y% = _YRef%
    If _M% < _MRef%
      _Err% = 2   ' Monat abgelaufen
    ElseIf _M% = _MRef%
      Case _D% < _DRef% : _Err% = 3   ' Tag abgelaufen
    EndIf
  EndIf
  _Y% = _Y% - 10
  Case _Y% < 0 : _Y% = _Y% + 100
  If _Y% > _YRef%
    _Err% = 4   ' Jahr liegt zu weit voraus
  ElseIf _Y% = _YRef%
    If _M% > _MRef%
      _Err% = 5 ' Monat liegt zu weit voraus
    ElseIf _M% = _MRef%
      Case _D% > _DRef% : _Err% = 6 ' Tag liegt zu weit voraus
    EndIf
  EndIf
  Return _Err%
EndProc

Proc OldTest
  Parameters _Date$
  Declare _Y%, _M%, _D%, _YRef%, _MRef%, _DRef%, _RefDate$, _Err%
  _Y% = Val(Mid$(_Date$, 1, 2))
  _M% = Val(Mid$(_Date$, 3, 2))
  _D% = Val(Mid$(_Date$, 5, 2))
  _RefDate$ = Date$(3)
  _YRef% = Val(Mid$(_RefDate$, 3, 2))
  _MRef% = Val(Mid$(_RefDate$, 5, 2))
  _DRef% = Val(Mid$(_RefDate$, 7, 2))
  _D% = _DRef% - _D%
  Case _D% < 1 : Inc _M%
  _M% = _MRef% - _M%
  Case _M% < 1 : Inc _Y%
  _Y% = _YRef% - _Y%
  Case _Y% < 0 : _Y% = _Y% + 100
  Case _Y% < %MinOld : _Err% = 1
  Return _Err%
EndProc

Proc ErrorText  ' Anfügen Fehlertexte
  Parameters _Err$, _NewErr$
  If _Err$ <> ""
    _Err$ = _Err$ + "\n" + _NewErr$
  Else
    _Err$ = _NewErr$
  EndIf
  Return _Err$
EndProc

Proc Test
  Declare _P1%, _P2%, _P3%, _P4%, _P5%, _P6%, _P7%, _P8%, _D$, _Test$
  _Test$ = GetText$(Edit1%)
  _D$ = Right$(_Test$, 1)
  _P1% = BlockTest(_Test$, -8)
  _Test$ = GetText$(Edit2%)
  _P2% = BlockTest(_Test$, 7)
  _P5% = DateTest(_Test$)
  ' Bei Bedarf Altersprüfung, wenn alle anderen Angaben OK
  Case %MinOld : _P8% = OldTest(_Test$)
  _Test$ = GetText$(Edit3%)
  _P3% = BlockTest(_Test$, 7)
  _P6% = DateTest(_Test$)
  _P7% = FromToTest(_Test$)
  _Test$ = GetText$(Edit1%) + GetText$(Edit2%) + GetText$(Edit3%) + GetText$(Edit4%)
  _P4% = BlockTest(_Test$, 0)
  ' Hier wäre noch denkbar:
  ' Zum Gültigkeitsdatum (Edit3%) - 10 Jahre muß der Inhaber
  ' mindestens 14 Jahre als gewesen sein
  _Test$ = "" ' leeren, nimmt nun Fehlermeldungen auf
  Case _P1% : _Test$ = ErrorText(_Test$, "Dokumentnummer oder ausstellende Behörde ungültig")
  Case _P2% : _Test$ = ErrorText(_Test$, "Geburtsdatum ungültig")
  Case _P3% : _Test$ = ErrorText(_Test$, "Gültigkeitsdatum ungültig")
  Case _P4% : _Test$ = ErrorText(_Test$, "Prüfziffer paßt nicht")
  Case _P5% : _Test$ = ErrorText(_Test$, "Geburtsdatum nicht möglich")
  Case _P6% : _Test$ = ErrorText(_Test$, "Gültigkeitsdatum nicht möglich")
  Case _P7% : _Test$ = ErrorText(_Test$, "Gültigkeit abgelaufen oder vordatiert")
  Case _P8% : _Test$ = ErrorText(_Test$, "Mindestalter nicht erreicht")
  Case _D$ <> "D" : _Test$ = ErrorText(_Test$, "Kein deutscher Personalausweis")
  Case _Test$ = "" : _Test$ = "Dokumentprüfung OK"
  MessageBox(_Test$, Titel$, 0)
EndProc

Proc ClearEdits
  SetText Edit1%, ""
  SetText Edit2%, ""
  SetText Edit3%, ""
  SetText Edit4%, ""
  SetFocus(Edit1%)
EndProc

WindowTitle Titel$
WindowStyle 536
Window 128, 128 - 366, 144
CLS ~GetSysColor(~Color_BtnFace)
TextColor RGB(0, 0, 250), -1
DrawText 4, 4, "Geben Sie die untere Zeile des zu prüfenden"
DrawText 4, 24, "Personalausweises ein"
TextColor 0, -1
DrawText 102, 56, "<<"
DrawText 194, 56, "<"
DrawText 276, 56, "<<<<<"
SetDialogFont ~GetStockObject(~Default_GUI_Font)
Edit1% = Create("Edit", %HWnd, "", 4, 54, 96, 20)
Edit2% = Create("Edit", %HWnd, "", 124, 54, 64, 20)
Edit3% = Create("Edit", %HWnd, "", 208, 54, 64, 20)
Edit4% = Create("Edit", %HWnd, "", 322, 54, 24, 20)
Button% = Create("Button", %HWnd, "Testen", 4, 82, 96, 24)
SetFocus(Edit1%)

WhileNot Ende%
  EnableWindow Button%, Len(GetText$(Edit1%)) And Len(GetText$(Edit2%)) And Len(GetText$(Edit3%)) And Len(GetText$(Edit4%))
  WaitInput
  If %Key = 2
    Ende% = 1
  ElseIf Clicked(Button%)
      Test
      ClearEdits
  EndIf
EndWhile
Gruß Volkmar
Volkmar ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 06.06.2011, 22:17   #2 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Ist ja klasse!
Wie kommt man denn an solche Infos? Schon toll, was man in ein paar Zahlen an Infos verstecken kann.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist gerade online   Mit Zitat antworten
Alt 06.06.2011, 22:47   #3 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard

Drauf gestoßen bin ich eigentlich über eine Diskussion über Internetseiten mit altersabhängiger Zugangsbeschränkung. Wie kann man sowas machen? Einfach fragen ist doof, da kann ich alles eingeben. Also der Ausweis. Der Rest findet sich im Netz, wenn man nur lange genug sucht. Sogar Programme, die Dir einen Wunschausweis basteln. Das Ganze ist also nicht unbedingt sicher.
Bei der Suche habe ich dann auch eine Beschreibung gefunden, wie diese Zahlen sich zusammensetzen und wie die Prüfsummen berechnet werden. Und das mußte eben dann auch gleich mal in XProfan umgesetzt werden. Um das Ganze abzurunden fehlt eigentlich nur noch eine Tabelle der ausstellenden Behörden. Das sind die ersten 4 Ziffern im ersten Ziffernblock. Wenn man die auch noch hätte, dann könnte man das Ganze dann auch noch mit der Postleitzahl abgleichen und hätte noch ein weiteres Prüfmerkmal.

Gruß Volkmar
Volkmar ist gerade online   Mit Zitat antworten
Alt 07.06.2011, 07:21   #4 (Direktlink)
Ist öfter hier
 
Registriert seit: 12.04.2009
Beiträge: 52
Standard

Da gab schon vor Jahren eine DLL, die außerdem
auch noch Kreditkarten überprüfen konnte.
Ich krame mal....
Habs bei den DLLs bei PureArea.net wieder
gefunden. Warum die mich damals Hartmut
nannten, ist mir bis heute ein Rätsel.

Ahja, habs mal in meine Dropbox gemacht :
http://dl.dropbox.com/u/20464970/ccvalid.zip
H.Brill ist offline   Mit Zitat antworten
Alt 07.06.2011, 09:55   #5 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard

Super DLL. Einfacher gehts wirklich nicht. Genau so hatte ich mir dann auch eine ernsthafte Anwendung vorgestellt, nur nicht verraten, woran die Prüfung scheitert.

Gruß Volkmar
Volkmar ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 07.06.2011, 16:28   #6 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Super Sache für Xrofan. Hab's umgescrieben für ältere Versionen.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Stichworte
personalausweis, prüfsumme

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ist der gefundene Windows XP Produkt Key noch gültig? Erni Windows XP 8 16.01.2008 15:48
DivX Pro kostenlos - nur mehr heute gültig! Stoffl Software - Allgemein 5 10.12.2007 16:50
ICQ: Passwort nicht gültig und keine e-mailadresse leon Browser, eMail und Messenger 9 10.01.2007 17:00
AntiVir nur bis zum 31.05.gültig? Desert_Igel Software - Allgemein 5 10.02.2006 10:45
Erstellen von Ausweis/Visitenkarte Card Software - Allgemein 4 29.04.2004 20:50



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:46 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2