WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Luhn-algoritmen i VB script? (https://www.wn.se/forum/showthread.php?t=1039746)

Z@cke 2009-12-27 12:42

Luhn-algoritmen i VB script?
 
Hej,

Är det någon som har en Luhn-algoritmfunktion liggandes? Jag behöver en funktion som räknar ut sista kontrollsiffran i en talföljd (godtyckligt antal siffror) med VB script.
Jag hittar gott om verifierings-skript på nätet, men inget som plockar fram själva siffran.

Tack på förhand!

digiArt 2009-12-27 12:50

Testat denna? http://sv.wikipedia.org/wiki/Luhn-algoritmen#VBA

Z@cke 2009-12-27 13:03

Tack,
Den var i VBA, inte VB Script. Hade hoppats på att själv inte behöva böka med konvertering utan en färdig lösning... :-)

qson 2009-12-27 13:08

PHP-kod:

function luhn (cc)
   
dim sumi

   sum 
0
   
for len (cc) - 1 to 1 step -2
      sum 
sum + array (0246813579) (cint (mid (cci1)))
   
next
   
for len (ccto 1 step -2
      sum 
sum cint (mid (cci1))
   
next
   luhn 
= (sum mod 10 0)
end function 

Saxat från http://ornery-geeks.org/text/code/validationcomparison/

Google är din vän ;)

Z@cke 2009-12-27 14:20

Tack igen,
Jag kanske var otydlig :-), men jag letade efter kod som tar fram kontrollsiffran, inte kontrollerade om den stämde.

Hur som helst så byggde jag en egen, ska testa lite först och se om det blev rätt innan jag vågar publicera koden här...

digiArt 2009-12-28 19:55

Citat:

Ursprungligen postat av Z@cke (Inlägg 20336801)
Tack,
Den var i VBA, inte VB Script. Hade hoppats på att själv inte behöva böka med konvertering utan en färdig lösning... :-)

Ähum, vad är skillnaden? Jag vet skillnaden på språken, men just i det där såg jag inget unikt för VBA, bör funka i VBScript.

Har du testkört?

Ara 2009-12-28 20:10

Citat:

Ursprungligen postat av Z@cke (Inlägg 20336810)
Tack igen,
Jag kanske var otydlig :-), men jag letade efter kod som tar fram kontrollsiffran, inte kontrollerade om den stämde.

Hur som helst så byggde jag en egen, ska testa lite först och se om det blev rätt innan jag vågar publicera koden här...

annars kan du vara lat och bara lägga in koden i en loop som loopar igenom (0-9) tills du får "träff" och vips så får du ut "rätt" siffra.

Z@cke 2009-12-28 20:29

digiArt: Vill minnas att VBA främst avsett för programmering i Microsoft Word, Excel, Access etc, och skiljer sig något från VBS. De är inte fullt kompatibla. Koden som man hittar om man följer länken du tipsar om funkar tyvärr inte i VBS.

Ara: Det är en lösning på problemet om än lite omständig.
Jag tror emellertid att jag har byggt en fungerande funktion i VBS som returnerar rätt kontrollsiffra. Den går säkert att förfina men den funkar tills vidare:

Med risk för att bli utskrattad: :-)

<%
Function getLuhn(talfoljd)

a = len(talfoljd) ' kolla längden på talföljden

FOR b = a TO 1 step -1 ' stega från slutet och framåt...

c = mid(talfoljd, b, 1) ' ta fram siffran vi skall behandla i talföljden...

IF b = a THEN t=2' om vi är i slutet av talföljden... sätt vikt till 2

IF t=2 THEN ' om vikt är 2...
d=c*t ' multiplicera med vikt (2) och...
t=1 ' sätt vikt till 1
ELSE ' om vikt är annat än 2 (=1)...
d=c*t ' multiplicera med vikt (1) och...
t=2 ' sätt vikt till 2
END IF

IF d>9 THEN d = int(left(d,1)) + int(right(d,1)) ' Om produkten är större än 9, dela upp produkten och addera talen med varandra

e = e + d ' addera produkten till totalsumman

NEXT ' stega framåt i talföljden

IF e MOD 10 = 0 THEN ' om summan av produkterna är jämnt delbart med 10 är kontrollsiffran 0
h=0
ELSE ' annars, räkna ut kontrollsiffran
f = ((fix(e/10))+1)*10
h = f-e
END IF

getLuhn = h ' returnera kontrollsiffran

End Function
%>


Alla tider är GMT +2. Klockan är nu 08:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson