D.Roos, J.Kardoeus: Normgerechte Prüfzeichen für Blutkonservennummern nach ISO 7064 | Version 1.1.2 | |
Normgerechte Prüfzeichen für Blutkonservennummern nach ISO 7064
Programmiervorschlag |
Dieser Abschnitt kann von Lesern ignoriert werden, die mit der Programmierung
des Prüfziffernalgorithmus nicht befasst sind.
Die folgende Funktionsprozedur berechnet und verifiziert Prüfziffern nach ISO 7064, MOD11,10.
Function CheckDigit1110 (NumStringIn As String, Mode As Integer) | ||||||||||||||||||||
' ' Zweck: ' Berechnung und Prüfung von Prüfziffer nach dem MOD11,10-Verfahren (DIN/ISO 7064). ' Die Ausführungsart der Funktionsprozedur wird durch das "Mode"-Argument wie folgt gesteuert: |
||||||||||||||||||||
|
||||||||||||||||||||
' Die Werte der Argumente werden in der Prozedur nicht verändert. | ||||||||||||||||||||
' | ||||||||||||||||||||
' Entwickelt: ' Dieter Roos, Joachim Kardoeus ' Literatur: ' Deutsches Institut fuer Normung (Hrsg.): DIN ISO 7064, Beuth Verlag GmbH, Berlin 1984 |
||||||||||||||||||||
' | ||||||||||||||||||||
' Entwickelt und getestet für ' - Microsoft Access ' - Microsoft Excel ' - Microsoft Visual Basic ' und kompatible Umgebungen. |
||||||||||||||||||||
'
|
||||||||||||||||||||
Dim J, N, P As Integer | ||||||||||||||||||||
' On Error GoTo ErrorHandlingCheckDigit1110 | ||||||||||||||||||||
P = 10 | ||||||||||||||||||||
If Mode = 0 Then N = Len(NumStringIn) - 1 Else N = Len(NumStringIn) | ' (1) | |||||||||||||||||||
For J = 1 To N | ' (2) | |||||||||||||||||||
P = P + Mid(NumStringIn, J, 1) | ' (3),(4) | |||||||||||||||||||
If P > 10 Then P = P - 10 | ' (5) | |||||||||||||||||||
P = P * 2 | ||||||||||||||||||||
If P >= 11 Then P = P - 11 | ' (6) | |||||||||||||||||||
Next J | ||||||||||||||||||||
Select Case Mode | ||||||||||||||||||||
Case 0 | ' Prüfmodus | |||||||||||||||||||
P = P + Mid(NumStringIn, N + 1, 1) | ' (4) | |||||||||||||||||||
If P > 10 Then P = P - 10 | ||||||||||||||||||||
CheckDigit1110 = (P = 1) | ||||||||||||||||||||
Case 1, 2 | ' Berechnungsmodus | |||||||||||||||||||
P = 11 - P | ||||||||||||||||||||
If P = 10 Then P = 0 | ||||||||||||||||||||
If Mode = 1 Then CheckDigit1110 = NumStringIn & P Else CheckDigit1110 = P | ' (4) | |||||||||||||||||||
Case Else | ' ungültige Eingabe | |||||||||||||||||||
CheckDigit1110 = "" | ||||||||||||||||||||
End Select | ||||||||||||||||||||
' Exit Function | ||||||||||||||||||||
' ErrorHandlingCheckDigit1110: | ||||||||||||||||||||
' Debug.Print "Unexpected error in CheckDigit1110: " & Err | ' Fehlerbehandlung | |||||||||||||||||||
' Debug.Print "Mode=" & Mode & " - NumStringIn=" & NumStringIn | ||||||||||||||||||||
' CheckDigit1110 = "" | ||||||||||||||||||||
' Exit Function | ||||||||||||||||||||
' | ||||||||||||||||||||
' Fussnoten: | ||||||||||||||||||||
|
||||||||||||||||||||
' | ||||||||||||||||||||
End Function |
Der Quellcode ist verfügbar als ASCII-Textdatei. Wegen der besseren Übersichtlichkeit und starker Umgebungsabhängigkeit beschränkt sich der Programmiervorschlag im wesentlichen nur auf den für das Prüfziffernverfahren unentbehrlichen Algorithmus. Möglichkeiten zur Verringerung der Rechenlast unter bestimmten Einsatzbedingungen werden deshalb nicht ausgeschöpft und können bei Bedarf bei den Autoren erfragt werden. Fehlerbehandlung wird nur in geringem Umfang und in auskommentierter Fassung vorgeschlagen und ist je nach Rahmenbedingungen entsprechend anzupassen. Insbesondere kann es zweckmäßig sein, innerhalb der Funktionsprozedur im Argument "NumStringIn" alle oder bestimmte nicht-numerische Zeichen zu überspringen. Anwendungsbeispiele sind verfügbar für MS-Excel 4.0 und MS-Access 2.0.
Empfehlungen zur Portierung auf andere Entwicklungsumgebungen
Die Funktionsprozedur berechnet abhängig von der Betriebsart für den Rückgabewert verschiedene Datentypen, und zwar für "Prüfen" einen Boolschen und für "Berechnen" einen Zeichenketten- oder Ganzzahlwert. Zur Portierung auf Plattformen, die Datentyp-variante Funktionen nicht unterstützen, kann entsprechend der vorfügbaren bzw. bevorzugten Datentypen alternativ wie folgt verfahren werden:
Copyright | Letzte Bearbeitung dieser Seite: 26.11.2000 01:06 |