| |
|
|
p.specht
| "Fletcher's Checksum" (ebenso wie z.B. Adlers Checksum) bildet eine positionsabhängige Checksumme - ganz im Sinne einer sog. CRC ("Zyklische Redundanz")-Summe, allerdings mit viel weniger Rechenaufwand. Der nachstehende Algorithmus wurde von John G. Fletcher in den 1970er-Jahren am Lawrence Livermore Institute entwickelt - für Atombombentests ...
proc FletcherChecksum :parameters DataMsg$
' Ohne jede Gewähr, insb. können Rechte Dritter bestehen!
var Length_of_Data&=len(DataMsg$)
declare c1&,c2&,c3&, i& ,S1&,S2&,S3&,S4&
whileloop Length_Of_Data&
c1&=c1&+ord(Mid$(DataMsg$,&loop,1))
c1&=c1& & $00ff :c2&=c2&+c1&:c2&=c2& & $00ff
EndWhile :c3&=c2&:c2&=c2&>>4 :c2&=c2& & $0f
if c2&>=$0A :S1&=c2&+ $37 :else :S1&=c2&+$30
endif:c2&=c3& & $0f
if c2&>= $0a:S2&=c2&+ $37 :else :S2&=c2&+ $30
endif:c3&=c1&:c1&=c1&>>4 :c1&=c1& & $0f
if c1&>= $0a :S3&=c1&+ $37 :else :S3&=c1&+ $30
endif :c1&=c3& & $0f
if c1&>=$0a:S4&=c1&+ $37 :else :S4&=c1&+ $30
endif:return chr$(s1&)+chr$(s2&)+chr$(s3&)+chr$(s4&)
endproc
CLS
Selbsttest:
case FletcherChecksum("5522 18 1137 00 003")<>"1C76":print "Error 1"
case FletcherChecksum("5522 18 3137 00 003")<>"3278":print "Error 2"
case FletcherChecksum("5522 18 1130 00 002")<>"E36E":print "Error 3"
case FletcherChecksum("5522 18 1401 00 001")<>"ED6E":print "Error 4"
case FletcherChecksum("5522 18 1302 00 003")<>"ED70":print "Error 5"
case FletcherChecksum("5522 18 1302 00 004")<>"EE71":print "Error 6"
case FletcherChecksum("5522 18 1302 00 009")<>"F376":print "Error 7"
case FletcherChecksum("5522 18 3147 00 009")<>"417F":print "Error 8"
case FletcherChecksum("5522 18 1137 00 004")<>"1D77":print "Error 9"
case FletcherChecksum("5522 18 3137 00 009")<>"3379":print "Error 10"
case FletcherChecksum("5522 18 1602 00 000")<>"0870":print "Error 11"
print "\n Fletchertest 10 ergibt korrekterweise";
print " ";FletcherChecksum("5522 18 3137 00 009");" statt '3379'."
print " Es könnte sich um einen Eingabefehler bei den Testwerten handeln!"
beep: print "\n Fletcher-Test done.\n"
waitinput:END
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 19.05.2021 ▲ |
|
|
|