Avatar billede sbarnney Nybegynder
16. januar 2004 - 11:09 Der er 4 kommentarer og
1 løsning

Validering af et tal.

Grundlæggende: Et nr. består af 18 cifre, hvor det sidste ciffer er et check ciffer, der skal verificeres.

Beregning af, hvad checkcifferet bør være sker i fire trin:

1. Tag hvert ciffer i nummeret bortset fra det sidste (checkcifferet)
og gang hvert af disse med hhv. 3 og 1 startende fra højre, således at
ciffer 17 ganges med 3, ciffer 16 med 1, ciffer 15 med 3 osv.!

2. Adder hvert af resultaterne af multiplikationerne fra trin 1, således at
der opnås en sum "B"!

3. Rund "B" op til nærmeste tal "C", som kan divideres med 10!

4. Checkciffer = "C" - "B" (hvilket svarer til "B modulus 10")!


Eksempel:

Aftagenr. 571313134400118877  - hvor tal sidste tal 7 er checkcifferet!

Trin 1: Multiplikation

5*3 ; 7*1 ; 1*3 ; 3*1 ; 1*3 ; 3*1 ; 1*3 ; 3*1 ; 4*3 ; 4*1 ; 0*3 ; 0*1 ;
1*3 ; 1*1 ; 8*3 ; 8*1 ; 7*3
---------------
Trin 2: Summation ("B")

B = 15 + 7 + 3 + 3 + 3 + 3 + 3 + 3 +12 + 4 + 0 + 0 + 3 +1 + 24 + 8 + 21 =
113
----------------
Trin 3: Oprunding ("C") - nærmeste tal som kan divideres med 10: C = 120
----------------
Trin 4: Subtraktion - check ciffer = C - B = 120 - 113 = 7

Hvilket jeg kan se stemmer med det rigtige checkciiffer, således at
nummeret er et validt nummer!

Kan nogen lave en sådan funktion til mig ?

MVH Stig
Avatar billede torstenhagemann Nybegynder
16. januar 2004 - 13:10 #1
Følgende funktion skulle validere dit nummer, men det er et problem at tallet er så langt, der er for mange betydende cifre ift. hvad javascript umiddelbart kan håndtere.

Jeg har løst det ved at tage Aftagenr. som en tekststreng i stedet for et tal, hvis det er et problem har jeg ikke umiddelbart nogen løsning.

  function validate (sNoToCheck) {
      var re = /\s*/
      var aTempCheck  = sNoToCheck.split(re)
      var iCheckSum    = Number(aTempCheck.pop())
      var iWeightedSum = 0

      while (aTempCheck.length > 0) {
        iWeightedSum += 3 * Number(aTempCheck.pop())
        if (aTempCheck.length > 0) {
            iWeightedSum += 1 * Number(aTempCheck.pop())
        }
      }
      var iTempCheckSum = 10 - (iWeightedSum % 10)
     
      return iCheckSum == iTempCheckSum
  }

Prøv funktionen med: alert(validate('571313134400118877'))

/Torsten
Avatar billede sbarnney Nybegynder
16. januar 2004 - 21:29 #2
Det virker helt fint, tak for den hurtige respons.

Stig

P.S. Jeg mangler at du laver et svar, så du kan få dine point.
Avatar billede torstenhagemann Nybegynder
19. januar 2004 - 08:23 #3
Det er jeg glad for at høre - jeg satte den ikke som svar, for jeg var ikke sikker på om du kunne bruge det når det skulle være en tekststreng (selvom jeg ikke kan se hvordan det skulle fungere med et tal 8-) ).

/Torsten
Avatar billede sbarnney Nybegynder
22. januar 2004 - 19:06 #4
Der sker ikke noget når jeg accepter dit svar ???

Stig

Jeg tager kontakt til eksperten.dk
Avatar billede sbarnney Nybegynder
22. januar 2004 - 19:09 #5
så var den der.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester