Modulo10recursive ( SeedNumber )
Calculates the Checksum for Swiss ESR/BESR
Average rating: 4.3 (39 votes) Log in to vote
Daniel Wilhelm - Show more from this author
Chumme AG http://www.chumme.ch |
Function definition: (Copy & paste into FileMaker's Edit Custom Function window)
Returns the Modulo10recursive checksum of a number as used for the swiss ESR / BESR
Comments
Christoph Kaufmann, CLK.ch Mar 11, 2009 |
||
Sehr sorgfältig ausgearbeitet, und das Problem, an dem ich gescheitert bin, ist genial gelöst: wie kriegt man die Formel dazu, beim ersten Durchgang etwas anders zu machen als bei allen späteren? Mit zwei Let-Funktion, verbunden mit &, wobei die erste immer "", also nichts als Resultat bringt, aber für die zweite Variablen definiert: Let([ $Startlength = Length ( SeedNumber ) ; $Restlength = Length ( $Rest) ] ;"") wobei $rest an dieser Stelle noch gar nicht existiert, so dass Length($rest) zwangsläufig 0 gibt. Bei jedem rekursiven Aufruf wird hingegen $rest zum neuen Parameter, also der "Seednumber", so dass die Frage zu Beginn der zweiten, "echten" Let-Function If( $Startlength > $Restlength ; Beim ersten Aufruf immer richtig, bei allen späteren immer falsch wird. |
||
Jacques Menu, Crissier Aug 8, 2011 |
||
Hello, I'm new to FM plug-in development. I guess the above sample is not written in FM's own scripting language. Is that so? Thanks for you help! Regards, |
||
Tim Griffith Mar 9, 2013 |
||
The variables are German Language words, but the structure is Filemaker. I believe 'nächstezeile' is equivalent to 'row' (as in an array) | ||
Daniel Wilhelm, Chumme AG Mar 10, 2013 |
||
Hi Tim Yes, you are right. Zeile X = Row X nächstezeile = nextrow rest = what is left over for the next calculation Greetings Dani |
||
Christoph L. Kaufmann, Zollikofen, Switzerland Apr 25, 2013 |
||
Same thing without $-variables. Needs two more parameters, though. Sample Modulo10 ("30115642" ; 1 ; 0 ) = 8 /* Name der Funktion: Modulo10 Parameter: Ziffern - die Ziffernfolge, zu der die Püfziffer ermittelt werden soll Start1 - beim Aufruf 1 eingeben (Position der aktuell untersuchten Ziffer) Start0 - bei Start 0 eingeben (Uebertragungswert für den aktuellen Durchlauf) Abwandlung der CF Modulo10Rekursiv von Datasol Wilhelm vom 15. Mai 2007 (herzlichen Dank) hier ohne $-Variablen, weil Armin Eggingers CrossCheck die immer anmeckert. */ Let ( [ ziffern = Filter ( Ziffern ; "1234567890" ) ; pos = Start1 ; ueber = Start0 ; menge = Length ( ziffern ) ; z0 = "09468271350" ; // erste Zahl für Reihe 0, 10. Zahl für Reihe 9, letzte Zahl ist Prüfziffer z1 = "94682713509" ; z2 = "46827135098" ; z3 = "68271350947" ; z4 = "82713509466" ; z5 = "27135094685" ; z6 = "71350946824" ; z7 = "13509468273" ; z8 = "35094682712" ; z9 = "50946827131" ; reihe = Case ( ueber = 0 ; z0 ; ueber = 1 ; z1 ; ueber = 2 ; z2 ; ueber = 3 ; z3 ; ueber = 4 ; z4 ; ueber = 5 ; z5 ; ueber = 6 ; z6 ; ueber = 7 ; z7 ; ueber = 8 ; z8 ; ueber = 9 ; z9 ; "" ) ; spalte = If ( pos ≤ menge ; Middle ( ziffern; pos ; 1 ) ; 10 ) ; // bis zur letzten Position die entsprechende Spalte nehmen, danach die Prüfziffer, die steckt in der 11. |
||
Christoph L. Kaufmann, Zollikofen, Switzerland Apr 25, 2013 |
||
Modulo10 continued (sorry, had Java Script disabled, message got truncated): // bis zur letzten Position die entsprechende Spalte nehmen, danach die Prüfziffer, die steckt in der 11. Spalte (wir nehmen die 10, wir unten mit "spalte+1" rechnen). uebertrag = Middle ( reihe ; spalte + 1 ; 1 ) ] ; If ( pos ≤ menge ; // bis zur letzten Position Modulo10 ( ziffern ; pos + 1 ; uebertrag ) ; // mit der ermittelten Uebertragungsziffer weiterfahren  // sonst haben wir die Prüfziffer erhalten uebertrag ) ) |
||
Wolfgang, Bern Jul 13, 2016 |
||
Hallo Christoph Ich habe versucht das ganze in eine eigene Funktion zu wandeln mit FM15 bin aber an zwei Dingen gescheitert. 1. ziffern = Filter ( Ziffern ; "1234567890" ) ; -> kommt die Rückmeldung falscher Parameter, muss ich Ziffern in "Ziffern" setzen damit es stimmt? 2. Modulo10 ( ziffern ; pos + 1 ; uebertrag ) -> Kommt immer beim Semikolon dass es zuviele Parameter geben soll. Kannst du mir hier bitte weiterhelfen, wäre mega cool. |
||
Erich Roth, c3000.ch GmbH Aug 24, 2021 |
||
Daniel Wilhelm und Christoph L. Kaufmann Ihr beiden seid ja sowas von genial. Vielen Dank für die Funktion. |
||
Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.