Prüfzifferberechnung unbekannt < Sonstige < Schule < Informatik < Vorhilfe
|
# Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo,
ich hoffe ich habe es einigermaßen in die richtige Kategorie geschrieben, es geht um eine Prüfzifferberechnung einer Zeichenfolge. Leider ist mir nicht bekannt, wie die Prüfziffer berechnet wird, aber ich habe einige Beispiele.
74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
74 01 20 4E 45 47 4C 4F 46 20 45 54 54 49 42 20 0D = Prüfziffer: 60
74 11 20 20 20 20 20 20 20 20 4C 4C 41 46 4E 55 0D = Prüfziffer: 0B
74 01 20 20 20 20 20 20 20 3E 3D 3D 3D 3D 3D 3D 0D = Prüfziffer: 19
Das ist komplett HEX-Format.
Ich muss wissen, wie diese Prüfziffer berechnet wird, da ich es für eine Programmierung benötige.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:45 Do 26.11.2009 | Autor: | rainerS |
Hallo!
Erstmal herzlich
> ich hoffe ich habe es einigermaßen in die richtige
> Kategorie geschrieben, es geht um eine
> Prüfzifferberechnung einer Zeichenfolge. Leider ist mir
> nicht bekannt, wie die Prüfziffer berechnet wird, aber ich
> habe einige Beispiele.
>
> 74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
> 74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
> 74 01 20 4E 45 47 4C 4F 46 20 45 54 54 49 42 20 0D = Prüfziffer: 60
> 74 11 20 20 20 20 20 20 20 20 4C 4C 41 46 4E 55 0D = Prüfziffer: 0B
> 74 01 20 20 20 20 20 20 20 3E 3D 3D 3D 3D 3D 3D 0D = Prüfziffer: 19
>
> Das ist komplett HEX-Format.
>
> Ich muss wissen, wie diese Prüfziffer berechnet wird, da
> ich es für eine Programmierung benötige.
Das ist aus den Beispielen nicht direkt zu ersehen. Die ersten beiden Zeilen unterscheiden sich ja nur im zweiten Zeichen (00 -> 01) und auch die Prüfziffer wird nur um 1 erhöht. Aber es ist keine Einfache Vorschrift wie zum Beispiel XOR aller Zeichen oder Addition und letztes Byte.
Hast du vielleicht noch mehr Info?
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:51 Do 26.11.2009 | Autor: | Hilde3023 |
Mehr Informationen direkt nicht, aber ich kann solche Beispiele nach Wunsch anfertigen.
z. B. alle HEX-Werte vor der Prüfziffer in 00 oder 01 oder 11 machen, ich weiß ja nicht, was helfen könnte ...
Es geht um Datenkommunikation von einem Gerät das die Daten seriell sendet (RS-232). Die Prüfziffer ist zur Kontrolle des Datensatzes.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:58 Do 26.11.2009 | Autor: | rainerS |
Hallo!
> Mehr Informationen direkt nicht, aber ich kann solche
> Beispiele nach Wunsch anfertigen.
>
> z. B. alle HEX-Werte vor der Prüfziffer in 00 oder 01 oder
> 11 machen, ich weiß ja nicht, was helfen könnte ...
Dann erzeuge doch kurze Beispiele! Welche Prüfziffer ergibt sich, wenn deine Zeichenkette nur ein Zeichen hat, und was passiert, wenn du ein weiteres Zeichen anfügst?
Oder nimm dir deine erste Zeichenkette und schau, was passiert, wenn du der Reihe nach jeweils einen einzigen der Hex-Werte um 1 erhöhst, also
74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
74 00 4A 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = ?
74 00 49 46 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = ?
usw.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:07 Do 26.11.2009 | Autor: | Hilde3023 |
Leider ist mir die Zeichenkettenlänge vorgeschrieben, es müssen vor der Prüfziffer so viele sein.
Ergebnis:
74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
74 00 4A 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = ? Ergebnis: 71
74 00 49 46 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = ? Ergebnis: 71
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:09 Do 26.11.2009 | Autor: | rainerS |
Hallo!
> Leider ist mir die Zeichenkettenlänge vorgeschrieben, es
> müssen vor der Prüfziffer so viele sein.
>
> Ergebnis:
> 74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
> 74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
> 74 00 4A 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = ? Ergebnis: 71
> 74 00 49 46 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = ? Ergebnis: 71
Interessant: 1 mehr an der 2. Position erhöht die Prüfzahl um 1, an der 3. und 4. Position erniedrigt sich die Prüfzahl.
Mach das doch mal weiter, also auf die 5A 49 4C 4F .. jeweils 1 drauf addieren.
Viele Grüße
Rainer
|
|
|
|
|
Werde ich morgen machen und veröffentlichen. Das dauert ein wenig, da ich jedes mal ein neues Eprom brennen muss wo die Software geändert ist und anschließend den Datenverkehr mithorchen und auswerten muss.
Welches Verfahren könnte denn so in etwa hinkommen, das so ein Ergebnis rauskommt? Kann man so wohl gar nicht weiter sagen, oder?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 08:29 Fr 27.11.2009 | Autor: | bazzzty |
Hallo,
aus meiner Sicht wäre es am hilfreichsten, wenn Du angefangen mit
00 00 00 00 00 ... 00 00 00 00
mal eine Reihe von Prüfsummen für jeweils ein einzelnes gesetztes Bit berechnen könntest. Wenn das zu viel ist, dann einfach nur für die unteren 5 Bytes, also für
00 00 00 00 ... 00 00 00 00 01
00 00 00 00 ... 00 00 00 00 02
00 00 00 00 ... 00 00 00 00 04
00 00 00 00 ... 00 00 00 00 08
00 00 00 00 ... 00 00 00 00 10
...
00 00 00 00 ... 10 00 00 00 00
Dazu noch ein 5-6 Zeichenketten, in denen beliebige Bits gesetzt sind, aber nur in diesem Bereich, also
00 00 00 00 ... xx xx xx xx xx
Wenn es sich bei der Prüfziffer um einen linearen Code (und das vermute ich) handelt, dann sollte das ausreichen, um ihn zu erkennen.
|
|
|
|
|
Leider habe ich erst Heute wieder Zeit gefunden. Leider steige ich jetzt nur schwierig durch, was ich alles für Zeichenfolgen anfertigen soll. Das Format bzw die Zeichenlänge muss ja beibehalten werden und ist beispielsweise:
74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
soll ich machen:
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 = Prüfziffer: ?
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 = Prüfziffer: ?
00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 = Prüfziffer: ?
[...]
?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:20 Fr 04.12.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Ich bin schon weitergekommen.
Vor der Prüfziffer sind ja immer 17 Werte, ich habe jeden Wert nacheinander +1 addiert und geschaut, wie sich die Prüfziffer weiterhin verändert.
Stelle Bedeutung Prüfziffer-Veränderung
1 74 (t Befehlanfang) Wert +1 = PZ +1
2 Anzeige-Ort Wert +1 = PZ +1
3 Wort 1, Zeichen 1 Wert +1 = PZ –3
4 Wort 1, Zeichen 2 Wert +1 = PZ +3
5 Wort 1, Zeichen 3 Wert +1 = PZ –3
6 Wort 1, Zeichen 4 Wert +1 = PZ +3
7 Wort 1, Zeichen 5 Wert +1 = PZ –3
8 Wort 1, Zeichen 6 Wert +1 = PZ +3
9 Wort 1, Zeichen 7 Wert +1 = PZ –3
10 Wort 2, Zeichen 1 Wert +1 = PZ +3
11 Wort 2, Zeichen 2 Wert +1 = PZ –3
12 Wort 2, Zeichen 3 Wert +1 = PZ +3
13 Wort 2, Zeichen 4 Wert +1 = PZ –3
14 Wort 2, Zeichen 5 Wert +1 = PZ +3
15 Wort 2, Zeichen 6 Wert +1 = PZ –3
16 Wort 2, Zeichen 7 Wert +1 = PZ +3
17 0D (Befehlende) Wert +1 = PZ –3
18 Prüfziffer
Wert +1 bedeutet immer, das ich mit einer Eins addiert habe.
Aber wie stelle ich dafür jetzt eine Formel auf?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:20 Mo 07.12.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Leute,
ich habe eine Antwort vom Entwickler des Gerätes erhalten und hatte
vorab angefragt, wie die Prüfziffer berechnet wird. Folgende Antwort:
Sofern ich mich richtig erinnere sind die Inhalte der Einzelbytes über
EXOR verknüpft worden. Im Anschluss wurde geprüft ob EVEN oder ODD
Parity vorlag. Bei ODD Parity wurde das Byte invertiert und auf EVEN
Parity ergänzt.
Hilft uns das schon weiter?
Mir sagt das ganze relativ wenig, aber es hört sich simpel an. Bitte um
Hilfe.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:19 Mo 07.12.2009 | Autor: | Hilde3023 |
Die Sache hat sich geklärt.
Alle Werte müssen mir XOR verknüpft werden und das Ergebnis von 127 (7F) subtrahiert werden.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:20 Mo 14.12.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:20 Fr 04.12.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|