Seriennummer Decoder

Sleepdog

Grünschnabel
Hallo zusammen,

ich stehe vor folgender Herausvorderung und hoffe das ihr mir helfen könnt.

vortab eine kleine Erläuterung

Ich habe eine Seriennummer bestehend aus 5 blöcken.

1. Block = Ursprungsland
2. Block = Teilenummer
3. Block = VendorID
4. Block = Datum
5. Block = weis ich selber nicht

wichtig ist für mich Block 4, dieser ist aufgebaut von links nach rechts, Jahr Monat Tag. Hierbei gilt folgendes.

Jahr: 2001 = 1,
Monat: 1-9, A, B, C,
Tag: 1-9, A-V

bsp. 1BM = 2001.11. 26

jetzt kommt die Aufgabe, ich habe eine html Seite in der ein Freitextfeld drin ist, diese ist begrenzt auf 3 zeichen, beim schreiben, quasi on the fly soll darunter das Datum als Text ausgegeben werden.

Ich habe mir schon etliche bsp. im Internet raus gesucht aber keinen wirklichen denkanstoß gefunden.

Das problem was ich sehe ist beim Jahr ist die 1 = 2001 und beim Monat wiederum ist die 1 der Januar.

ich hoffe mir kann hier jemand helfen.

Gruss und Danke
Tino
 
Dementsprechend müsste aber M 22 sein oder irre ich mich?

// EDIT: So sehe mein Vorschlag aus:
Javascript:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Datumsberechnung</title>
</head>

<body>
<script type="text/javascript">
function datum()
 {
  var code   = document.getElementById('block4').value.toUpperCase();
  var parts  = code.split("");
  var year   = "";
  var month  = "";
  var day    = "";
  var months = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C');
  var days   = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
  
  /* Welches Jahr? */
  for(var i = 0; i < 10; i++)
   {
    if(parts[0] == i)
     {
      year = '200'+i;
      break;
     }
   }
  
  /* Datumsformat ungültig? */
  if(year == "")
   {
    year = false;
   }
  
  /* Welcher Monat ? */
  for(var i = 0; i < 12; i++)
   {
    if(parts[1] == months[i])
     {
      month = i+1;
      break;
     }
   }
  
  if(month == "")
   {
    month = false;
   }
    
  /* Welcher Tag? */
  for(var i = 0; i < 31; i++)
   {
    if(parts[2] == days[i])
     {
      day = i+1;
      break;
     }
   }
  
  /* Datumsformat gültig? */
  if(day == "")
   {
    day = false;
   }
  
  /* Ist das gesamte Datumsformat gültig? */
  if(day == false || month == false || year == false)
   {
    document.getElementById('date').innerHTML = 'ungültiges Datumsformat';
   }
   else
   {
    document.getElementById('date').innerHTML = day+"."+month+"."+year;
   }
 }
</script>

<form>
 <input id="block4" type="text" size="3" maxlength="3" value="1BM" /><br />
 <input type="button" value="Berechnen" onclick="datum();" /><br />
</form>
Datum: <span id="date">---</span>
</body>
</html>
 
Zuletzt bearbeitet:
das ist genau das was ich gesucht habe, danke!

du hast recht mit M, entweder verzählt oder ein schreibfehler.

Danke nochmal! Das kann ich nun gut einbauen.
 
Nichts zu danken, dass war in zehn Minuten niedergeschrieben. Bevor ich dir jetzt Schritt für Schritt erklärt hätte wie und was, habe ich es dir einfach selber geschrieben. Falls du wissen willst wie es funktioniert: schau es dir an und wenn irgendwas unklar ist einfach noch mal nachfragen.
 
Hi,

oder eine Variante ohne for-Schleifen, stattdessen über ein Objekt.
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
var objAlphabet = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,
                   'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15, 'G': 16, 'H': 17, 'I': 18,
                   'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23, 'O': 24, 'P': 25, 'Q': 26, 'R': 27,
                   'S': 28, 'T': 29, 'U': 30, 'V': 31};

function formatDate(objInput){
  var arrParts = objInput.value.split("");
  var objElem  = document.getElementById("outID");

  if(isNaN(arrParts[0])){
    objElem.innerHTML = "Kein gültiges Datum (erste Ziffer)";
    return;
  }
  objElem.innerHTML = (2000 + Number(arrParts[0])) + ".";

  if(arrParts.length < 2) return;
  if((typeof objAlphabet[arrParts[1].toUpperCase()] == "undefined")||(objAlphabet[arrParts[1].toUpperCase()] > 12)){
    objElem.innerHTML = "Kein gültiges Datum (zweite Ziffer)";
    return;
  }
  objElem.innerHTML += objAlphabet[arrParts[1].toUpperCase()] + ".";


  if(arrParts.length < 3) return;
  if(typeof objAlphabet[arrParts[2].toUpperCase()] == "undefined"){
    objElem.innerHTML = "Kein gültiges Datum (dritte Ziffer)";
    return;
  }
  objElem.innerHTML += objAlphabet[arrParts[2].toUpperCase()];
}
 //-->
</script>
</head>
<body>
<input type="text" onkeyup="formatDate(this);" value="">
<div id="outID"></div>
</body>
</html>

Ciao
Quaese
 

Neue Beiträge

Zurück