Avatar billede rashid Praktikant
03. juni 2009 - 13:11 Der er 6 kommentarer og
2 løsninger

aldersberegning

hej

jeg har fundet følgende script, som kan beregne alder når man indtaster i formatet: ddmmYYYY - da jeg ikke er stærk til javascript ville jeg gerne have lidt hjælp til at man kunne beregne det hvis der blev indtastet et cpr. Ikke en cpr validering, men blot beregning af alder (de sidste 4 skal naturligvis skæres bort vha string-funktionen)

håber det er forståeligt. (alternativt en anden kode hvis nogen ligger inde med den ;-) )

her er koden:
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
<!--

function Tester10(data) {
  var result = CalculateAge(data);
  document.all.item("age").value = result;
  document.all.item("format").value = format;
  document.write("jeg er" +result.getyear());
}

-->
</SCRIPT>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<Script language="javascript">
/******************************************************************************
* parameters: date
*
* purpose: Calculates an age for a date
*****************************************************************************/
var format = ""; // Can be Years, Months, Days for age

function CalculateAge(date) {
  var slashIndex = date.indexOf("/");
  var birthday, birthmonth, birthyear;
 
  if (slashIndex != -1) { // With slashes
    var segments = date.split("/");
    birthmonth = segments[0];
    birthday = segments[1];
    birthyear = segments[2];
  }
  else {                  // No slashes
    birthmonth = date.substring(0, 2);
    birthday = date.substring(2, 4);
    birthyear = date.substring(4, date.length);
  }
 
  var today = new Date();
  var thisDay = today.getDate();        // Returns the day of the month
  var thisMonth = today.getMonth() + 1; // Need to add a one since the month is zero based - January
  var thisYear = today.getFullYear();  // Returns the year
 
  var yearsDiff = CalculateYear(birthyear, thisYear);
  var monthsDiff = CalculateMonth(birthmonth, thisMonth);
  var daysDiff = CalculateDay(birthday, thisDay);
  format = "Years"; // set the format to years
 
  // For the year is greater than zero
  if (yearsDiff > 0) {
    if (monthsDiff > 0) {    // Month is greater than zero so return we have our age
      return yearsDiff;
    }
    else if (monthsDiff < 0) { // Month is less than zero so return the age minus 1
      if (yearsDiff != 1) {
        return yearsDiff - 1;
      }
      else {
        if (monthsDiff == -11) { // Turn of the year
          if (daysDiff >= 0) {  // greater than one month
            format = "Months";
            return 1;
          }
          else {                // less than one month
            format = "Days";
            return thisDay - (31 - birthday);
          }
        }
        else {
          format = "Months";    // Next year but not quite a year old
          if (daysDiff >= 0) {
            return thisMonth + (12 - birthmonth);
          }
          else {
            return thisMonth + (12 - birthmonth) - 1;
          }
        }
      }     
    } 
    else {                // We are in the persons birth month
      if (daysDiff >= 0) { // Today is greater or equal to the person's birthdate
        return yearsDiff;
      }
      else if (daysDiff < 0 && yearsDiff != 1) { // Today is less than the person's birthdate
        return yearsDiff - 1;
      }
      else {
        format = "Months";
        return 11;
      }
    }
  }
  else {  // For the year equaling zero or same year as birthdate
    format = "Months";
    if (monthsDiff > 0) { // Later in the same year
      if (daysDiff >= 0) {
        return monthsDiff;
      }
      else {
        if (monthsDiff != 1) {
          return monthsDiff - 1;
        }
        else {
          format = "Days";
          return thisDay + (DaysInMonth(birthmonth, birthyear) - birthday);
        }
      }
    }
    else {  // Same month as birth month
      format = "Days";
      if (daysDiff == 0) {
        return 1; // Today's the birthdate
      }
      else {
        return daysDiff;
      }
    }
  }             
}

/******************************************************************************
* parameters: birthYear, thisYear
*
* purpose: Calculates the year based on the offsets between the birthyear and
*          thisYear
*****************************************************************************/
function CalculateYear(birthYear, thisYear) {
  return thisYear - birthYear;


/******************************************************************************
  * parameters: birthMonth, thisMonth
*
* purpose: Calculates the month based on the offsets between the birthMonth and
*          thisMonth
*****************************************************************************/
function CalculateMonth(birthMonth, thisMonth) {
  return thisMonth - birthMonth;
}

/******************************************************************************
* parameters: birthday, thisday
*
* purpose: Calculates the month based on the offsets between the birthDay and
*          thisDay
*****************************************************************************/
function CalculateDay(birthDay, thisDay) {
  return thisDay - birthDay;
}

/******************************************************************************
* parameters: birthday, thisday
*
* purpose: Calculates the days in the month based on month (year for leap year
*
****************************************************************************/
function DaysInMonth(month, year) {
  month -= 0;
  if (month == 2) {
    var leapYear = IsLeapYear(year);
  }
 
  switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      return 31;
    case 4:
    case 6:
    case 9:
    case 11:
      return 30;
    case 2:
      if (leapYear) {
        return 29;
      }
      else {
        return 28;
      }
  }
}

</Script>
</HEAD>
<BODY>
<P>Alders Beregning:
  <INPUT id=text10 name=text10>
  <INPUT id=button10 name=button10 type=button value="beregn" onclick="java script:Tester10(document.all.item('text10').value); return true;">
<INPUT type=text name=age id=age disabled>
</P>
</BODY>
</HTML>
Avatar billede mrgumble Nybegynder
03. juni 2009 - 13:29 #1
Jeg er heller ikke særlig stærk til JavaScript, men jeg vil gætte på, at det du forsøger på er, at tage et input i CPR-format (DDMMYY-XXXX) og på magisk vis lade funktionen lave det om til DDMMYYYY.
Det jeg ville gøre er at lave en konverter-funktion (i pseudokode, sorry):
input: cpr
1. if (cpr[5:6] < '00') then // cpr[5:6] svarer til det 5. og 6. tegn
2.    return (cpr[1:4] + '19' + cpr[5:6])
3. else:
4.    return (cpr[1:4] + '20' + cpr[5:6])

Det eneste du mangler at vide er, hvordan du henter substrenge i JavaScript.
Avatar billede mrgumble Nybegynder
03. juni 2009 - 13:32 #2
Og nu jeg kigger på det, så skal 'if'-sætningen nok laves om til:
1. if (parseInt(cpr[5:6]) > 10) then

så folk med cpr-nummer ddmm10-xxxx bliver opfattet som født i 1910, mens ddmm09-xxxx bliver opfattet som født i 2009.
Avatar billede mcb2001 Nybegynder
03. juni 2009 - 13:33 #3
bare lige en kommentar - CPR tjek må ikke udføres, vi har ikke, i danmark, haft modulo 11 tjek på CPR siden 2007:

http://da.wikipedia.org/wiki/CPR-nummer
Avatar billede rashid Praktikant
03. juni 2009 - 13:42 #4
jamen det er ikke et cprcheck jeg er ude efter - blot en funktion til at kontrollere hvor gammel man er ud fra et cprnr.
Ovenstående kan godt skrive alderen når man indtaster ddmmyyyy, så jeg skal blot have hjælp til at den kan finde ud af det med ddmmyy.
Avatar billede mcb2001 Nybegynder
03. juni 2009 - 13:49 #5
i know - bare en kommentar, da du nævnte CPR tjek i toppen... :-)
Avatar billede rashid Praktikant
09. juni 2009 - 08:27 #6
jeg har nu fået hjælp til nedenstående kode, men desværre synes jeg den kommer op med for mange info, hvor man skal trykke ok...
Nogen der har en ide til at optimere den, så den kun viser hvor gammel personen er ????

her er koden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Valider CPR nr</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
function cprCheck(flt){
  var cpr = flt.value,match = false,c = flt.form.elements["cpr-status"];
  if(cpr.match(/[0-9]{6}\-?[0-9]{4}/)){
    c.disabled = false;
    cpr = cpr.replace(/\-/g,"");
    var chk = 0;
    for(i=9;i>-1;i--){
      chk += (+cpr.charAt(i))*((i>2)?(10-i):(4-i));
    }
    if(chk%11==0)match = true;
    var dag = new Date(+cpr.substring(4,2),+cpr.substring(2,2),+cpr.substring(0,2));
    if(dag.getTime() > new Date().getTime() || !match){
      c.style.color = "red";
      c.value = "Ugyldigt Cpr nr.";
    }else{
      c.style.color = "green";
      c.value = "Gyldigt Cpr nr. (Køn: " + ((cpr.match(/[13579]$/))?"Mand":"Kvinde") + ")";
      showAge();
    }
  }else{
    c.disabled = true;
    c.style.color = "black";
    c.value = (cpr.length>0)?"Validerer ...":"<-- Indtast CPR nr.";
  }
}

function showAge()
{
var str = document.forms[0].cpr.value;
var bday=parseInt(str.substring(0,2));
alert(bday);
var bmo=(parseInt(str.substring(2,4))-1);
alert(bmo);
var byr=(str.substring(4,6));
alert(byr);
if(byr>10)
{byr = "19"+byr;
}
else
{byr = "20"+byr;}
alert(byr);
var byr;
var age;
var now = new Date();
tday=now.getDate();
tmo=(now.getMonth());
tyr=(now.getFullYear());

{
if((tmo > bmo)||(tmo==bmo & tday>=bday))
age=byr
else
{age=parseInt(byr)+1}

alder=(parseInt(tyr)-parseInt(age))
alert("Du er "+(alder)+ " år gammel");
}}
</script>
</head>
<body>
<form name="form1" method="post" onSubmit="">
  <input type="text" name="cpr" onKeyUp="cprCheck(this)">&nbsp;<input type="text" name="cpr-status" size="25" value="&lt;-- Indtast CPR nr." disabled><br>

</form>
</body>
</html>
Avatar billede rashid Praktikant
09. juni 2009 - 13:04 #7
har fundet ud af det :-)

det var "blot" de alert's der ikke skulle vises, der skulle markeres ud.

Takker for kommentarer!
Avatar billede rashid Praktikant
09. juni 2009 - 13:06 #8
-> mrgumble får lige points, da det ledte mig i den rigtige retning.
Nu har jeg et JS, der kontrollerer cpr og giver mig alder...
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

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



IT-JOB

Metroselskabet og Hovedstadens Letbane

IT-projektleder

Sindico Group A/S

Business Central Specialist

IT & Co ApS

IT-tekniker

Bunker Holding A/S

Director of Technology

Metroselskabet og Hovedstadens Letbane

Cyber Security Coordinator