Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Wie: String-Eingabe auf variable Regeln prüfen? (Script?) (https://www.delphipraxis.net/158335-wie-string-eingabe-auf-variable-regeln-pruefen-script.html)

ralfiii 14. Feb 2011 09:08

Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
Hallo!

In unserer Software kann man eine Patienten-ID eingeben. Das ist bei den meisten Installationen die Sozialversicherungsnummer.
Diese Zeichenkette ist in unterschiedlichen Ländern unterschiedlichen Regeln unterworfen.

z.B. in Österreich:
* 4stellige Nummer "abcx" gefolgt vom sechsstelligen Geburtsdatum "dDmMyY"
* Prüfziffer x=(a*3 + b*7 + c*9 + d*5 + D*8 + m*4 + M*2 + y*1 + Y*6) mod 11

Hat jemand eine Idee wie ich die Überprüfung der Patienten-ID möglich offen gestalten könnte (also so, dass man die Regel, die dann vorzugsweise in einer Art Config-File gespeichert wird im Feld anpassen kann)?

Ein regulärer Ausdruck hilft da ja nix, so weit ich weiss kann man da nicht rechnen.
Irgendeine Script-geschichte?
Danke,
Ralf

WM_CLOSE 14. Feb 2011 09:11

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
http://www.delphipraxis.net/135569-m...athelib-_.html
wie siehts damit aus??

jfheins 14. Feb 2011 09:28

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
Du könntest dlls verwenden. Diese dann in einem Unterordner des Programmordners speichern und beim starten den Ordner durchsuchen und den Benutzer fragen, welche er verwenden möchte.
Wenn nachher dann weitere Länder hinzukommen brauchst du nur eine dll kopieren ;)

Die dll sollte dann so eine Funktion wie "IsNumberValid(x:string):Boolean" (aufpassen mit strings) mitbringen und vielleicht ein bisschen Kosmetik wie "GetDisplayName():string"

WM_CLOSE 14. Feb 2011 09:29

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
oder das hier:
http://www.delphipraxis.net/140590-s...i-v-0-6-a.html
oder PascalScript

Neutral General 14. Feb 2011 09:37

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
@WM_CLOSE: Keiner deiner bisherigen Vorschläge hilft irgendwie bei diesem Problem :roll:

jfheins' Vorschlag wäre jetzt auch auf die Schnelle das was ich vorschlagen würde.
Theoretisch liese sich das ganze doch mit regulären Ausdrücken lösen. Falls die grundlegende Form der Eingabe korrekt ist musst du halt die Prüfziffer nochmal gesondert überprüfen, weil der reguläre Ausdruck das ja nicht kann.

Gruß
Neutral General

WM_CLOSE 14. Feb 2011 09:46

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
@Neutral General:
mit der Script Engine hat man dieselben Vorteile wie bei der Dll, hat aber den Vor- bzw Nachteil, dass der Nutzer die Berechnung selbst relativ einfach selbst anpassen kann.

Die MatheLib könnte in Verbindung mit regex den selben Efekt zeigen.

Der Nachteil bei beiden Lösungen ist, dass sie aufwändiger zu implementieren sind als ein einfacher dll Aufruf.

Es wurde aber in Post #1 nach einer Lösung gefragt, die in einem Config-File anpassbar ist.

@Neutral General: Wenn du ein persönliches Problem mit mir hast kannst du dich gerne per PN an mich wenden.

Neutral General 14. Feb 2011 10:07

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
@WM_CLOSE:

Ich habe kein persönliches Problem mit dir.
himitsus String-Mathe-Lib bringt hier einfach nichts. Die ist dafür ausgelegt vor allem über Strings mit sehr großen Zahlen rechnen zu können. Man könnte die Prüfziffer sicher auch über diese MatheLib berechnen aber... wieso? Wenn ich nicht total aufm Schlauch stehe, dann hat man davon einfach nichts.

Mit einer Scriptengine wäre die Sache mehr oder weniger lösbar, jetzt wo ich nochmal drüber nachdenke. Aber auch das kommt mir einfach etwas zu weit hergeholt vor.. Keine Ahnung. Vielleicht hab ich da auch irgendwas übersehen was eine Scriptengine doch rechtfertigen würde.

Mein Kommentar war jetzt eigentlich nicht böse gemeint, aber mir kamen deine Vorschläge irgendwie zu weit hergeholt vor.

Nur ne kleine Lösung die mir grad so eingefallen ist. Ist jetzt aber noch nicht großartig durchdacht.

Vllt. ne Ini-Datei?

Zitat:

[PatientenID]
Format=####ddmmyy
Faktor=3,7,9,0,5,8,4,2,1,6 // Oder falls nur 1-stellige Faktoren: 3790584216 ?
Mod=11
Dann ne Klasse/Funktion die diese Einstellungen verwaltet und eine Funktion, die die ID anhand dieser Regeln überprüfen kann.

Ist sicher noch nicht ausgereift. Aber vllt ein Anfang?

ralfiii 14. Feb 2011 10:41

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
Zitat:

Zitat von WM_CLOSE (Beitrag 1081515)

PascalScript von RemObjects scheint perfekt dafür zu sein, danke.

@Neutral General: Dein Prüfziffer-schema wäre zu unflexibel.
Was wenn z.B. Schweden das nicht mit modulo sondern ganz anders macht, oder nicht nur Zahlen sondern auch Buchstaben verwenden lässt...

ralfiii 14. Feb 2011 14:52

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
Zitat:

Zitat von ralfiii (Beitrag 1081532)
PascalScript von RemObjects scheint perfekt dafür zu sein, danke

Spiele grad herum damit, scheint ja echt recht mächtig zu sein, aber ich find keine docu.
Wenn ich nun z.B. eine Exception raisen will, so mach ich das mit
raiseexception
Aber wo gibt's die Doku zu den Parametern? Das Wiki unter http://wiki.remobjects.com/wiki/Pascal_Script ist ja geradezu erschreckend leer.

Danke!
Ralf

p80286 14. Feb 2011 14:53

AW: Wie: String-Eingabe auf variable Regeln prüfen? (Script?)
 
Ich habe ein ähnliches Problem, (Formale Prüfung von Patentnummern) und da bediene ich mich für jedes Land aus einem "Baukasten", zerlege also die übergebene Nummer einzelne Teile.
Da sich da nicht viel ändert, kann ich problemlos einmal im Jahr den entsprechenden Update erstellen.
Bei höherer Änderungsfrequenz wäre die DLL-Lösung bestimmt nicht schlecht.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz