Avatar billede lauge Nybegynder
16. juni 2004 - 11:19 Der er 10 kommentarer og
1 løsning

progress funktion til javascript

Hejsa,

Jeg har noget kode skrevet i progress som skal bruges til validering på nogle input felter.

Kan sådan kode skrive om til JS? (jeg kender minus til progress og kun lidt til JS)

En kunde skriver så et kunde nummer så som :
S12345678 (9 tegn ialt)

  Do:
    weight = "2121212110".
    accnr = accnr + "0".
    i = 0.
    Case SubString(accnr,1,1):
      when "A" or when "J" then i = 1.
      when "B" or when "K" or when "S" then i = 2.
      when "C" or when "L" or when "T" then i = 3.
      when "D" or when "M" or when "U" then i = 4.
      when "E" or when "N" or when "V" then i = 5.
      when "F" or when "O" or when "W" then i = 6.
      when "G" or when "P" or when "X" then i = 7.
      when "H" or when "Q" or when "Y" then i = 8.
      when "I" or when "R" or when "Z" then i = 9.
      otherwise ok = false.
    End case.
    If ok then
    Do:
      accnr = String(i) + SubString(accnr,2).
      sum = 0.
      Do i = 1 to 10:
        c = Integer(SubString(accnr,i,1)) * Integer(SubString(weight,i,1)).
        if c > 9 then run tver(INPUT-OUTPUT c).
        sum = sum + c.
      End.
      ok = sum mod 10 = 0.
    End.
  End.
  Else ok = false.
End.                             

Procedure tver.
  Def INPUT-OUTPUT PARAMETER c as Integer.
  def var s as char.
  def var j as integer.
  def var tal as integer.
  Do while c > 9:
    s = String(c).
    c = 0.
    Do j = 1 to Length (s):
      tal = integer(substring(s,j,1)).
      c = c + tal.
    End.       
  End.
End.

Koden behøver ikke tage hensyn til til andre prefixer en S som du ifølge ovenstående oversætter til 2.

Bemærk at antal karakter er præcis 9 incl "S".


Er her nogen som gider skrive til om til JS hvis det kan lade sig gøre :-)

Lauge
Avatar billede roenving Novice
16. juni 2004 - 12:31 #1
Hvis jeg har forstået proceduren korrekt, nå det blive sådan noget:

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>

<title>Tomt dokument</title>
<meta name="keywords" content="søgeord adskilt af komma">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">

</style>
<script language="javascript" type="text/javascript">
function checkKundeNr(fld){
  var v = fld.value.toLowerCase().split("");
  if(v.length!=9){
    alert('Fejl i kundenummer!');
    fld.focus();
    return false;
  }
  var weight = "212121211".split("");
  var id = ["","aj","bks","clt","dmu","env","fow","gpx","hqy","irz"];
  for(i=1;id.length>i;i++){
    if(id[i].indexOf(v[0])>-1){
      v[0] = i;
      break;
    }
  }
  alert(v+"\n"+weight)
  var sum = 0;
  for(i=0;9>i;i++){
    s = +v[i] * +weight[i];
    sum += (s>9)?s%9:s;
    alert(sum);
  }
  if(sum%10!=0){
    alert('Fejl i kundenummer!');
    fld.focus();
    return false;
  }else{
    alert('Kundenummer er korrekt!');
    return true;
  }
}
</script>
</head>
<body>
<br>
<form id="minForm" name="minForm">
<input id="minInput" name="minInput" type="text" value="Indtast kundenummer" onchange="checkKundeNr(this);" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20">
<br>
</form>
<span id="minSpan">En span-tekst</span>

</body>

</html>
Avatar billede lauge Nybegynder
16. juni 2004 - 12:35 #2
roenvig >> shiiit :-)
Kanon !!! jeg tester det lige i løbet af i morgen og vender tilbage!

LAuge
Avatar billede roenving Novice
16. juni 2004 - 12:35 #3
-- og du kunne måske lægge et par korrekte numre, hvis ovenstående fejler, for så er der garanteret en af de mere subtile ting i Progress-programmet, jeg ikke har fattet (jeg har aldrig set den slags kode før !-)

Men jeg fandt ud af, at ud fra dit eksempel kunne et rigtigt nummer være s12345675 ...
Avatar billede roenving Novice
16. juni 2004 - 12:38 #4
-- og alle alert-linjerne skal selvfølgelig slettes, så selve scriptet bliver:

<script language="javascript" type="text/javascript">
function checkKundeNr(fld){
  var v = fld.value.toLowerCase().split("");
  if(v.length!=9){
    alert('Fejl i kundenummer!');
    fld.focus();
    return false;
  }
  var weight = "212121211".split("");
  var id = ["","aj","bks","clt","dmu","env","fow","gpx","hqy","irz"];
  for(i=1;id.length>i;i++){
    if(id[i].indexOf(v[0])>-1){
      v[0] = i;
      break;
    }
  }
  var sum = 0;
  for(i=0;9>i;i++){
    s = +v[i] * +weight[i];
    sum += (s>9)?s%9:s;
  }
  if(sum%10!=0){
    alert('Fejl i kundenummer!');
    fld.focus();
    return false;
  }else{
    alert('Kundenummer er korrekt!');
    return true;
  }
}
</script>

-- som du måske kan se tester jeg også for længden ...
Avatar billede lauge Nybegynder
16. juni 2004 - 12:43 #5
jeg skaffer lige nogle eksempler!
Avatar billede lauge Nybegynder
16. juni 2004 - 13:06 #6
Accnr
|----------|
|S00001764 |
|S00001764 |
|S00001782 |
|S00001791 |
|S00001844 |
|S00001960 |
|S00001979 |
|S00002031 |
|S00002102 |
|S00002111 |
|S00002157 |
|S00002157 |
|S00002166 |
|S00002184 |
|S00002282 |
|S00002291 |
|S00002291 |
+----------+

invalide er f.ex

S00002158
S00002159
S00002295
S00002297

idet sidste ciffer altid er givet ud fra de forangående cifre altså har du S0000229 så skal sidste ciffer være 1.
Avatar billede roenving Novice
16. juni 2004 - 13:42 #7
Der var et problem med at en tværsum blev fortolket til 0, men så bliver det:

function checkKundeNr(fld){
  var v = fld.value.toLowerCase().split("");
  if(v.length!=9){
    alert('Fejl i kundenummer!');
    fld.focus();
    return false;
  }
  var weight = "212121211".split("");
  var id = ["","aj","bks","clt","dmu","env","fow","gpx","hqy","irz"];
  for(i=1;id.length>i;i++){
    if(id[i].indexOf(v[0])>-1){
      v[0] = i;
      break;
    }
  }
  var sum = 0;
  for(i=0;9>i;i++){
    s = +v[i] * +weight[i];
    sum += (9>=s)?s:(s%9==0)?9:s%9;
  }
  if(sum%10!=0){
    alert('Fejl i kundenummer!');
    fld.focus();
    return false;
  }else{
    alert('Kundenummer er korrekt!');
    return true;
  }
}
Avatar billede lauge Nybegynder
16. juni 2004 - 14:11 #8
supermand>> smid lige et svar!
Kommer du til Helsingør en dag, så giver jeg en øl! :-)
Avatar billede roenving Novice
16. juni 2004 - 14:16 #9
Velbekomme '-)
Avatar billede lauge Nybegynder
16. juni 2004 - 14:40 #10
:-)
Avatar billede roenving Novice
16. juni 2004 - 14:41 #11
-- og tak for point ;~}
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