Avatar billede krestionsen Nybegynder
10. september 2006 - 11:00 Der er 16 kommentarer og
1 løsning

Kontrol af cpr nr. og dato i en textbox

Hvordan laver man en textbox, hvor de kun kan skrive en dato som xx-xx-xxxx og hvordan laver man en textbox, hvor man kan skrive et cpr nr. som xxxxxx-xxxx, så man er sikker på at de ikke skriver forkert?
Avatar billede mcnovy Nybegynder
10. september 2006 - 11:37 #1
Hvorfor vil du lave datoen som textbox..?
du kunne jo vælge at lave det hvor at der dukker en lille kalender op som brugeren kan vælge fra..!

herinde kan du finde lidt om hvordan du tjekker om cpr nummeret er validt
http://www.cpr.dk/Index/dokumenter.asp?o=2&n=0&d=649&s=4

håber det er nok info.!
Avatar billede nielle Nybegynder
10. september 2006 - 11:48 #2
Til CPR nummeret kan du indsætte en MaskedTextBox og sætte dennes Mask til 000000-0000.
Avatar billede nielle Nybegynder
10. september 2006 - 11:51 #3
Hvad angår det at lave modulus-11 tjek på CPR-nummeret, så vil jeg anbefale at man lader være. Der er kun ganske få år til at CPR-registrer dropper dette tjek:

http://www.cpr.dk/Index/dokumenter.asp?o=2&n=0&h=2&d=647&s=4
Avatar billede nielle Nybegynder
10. september 2006 - 12:00 #4
... tror selv at jeg ville nøjes med at tjekke om datodelen var en lovlig dato, samt eventuelt om de sidste ciffer stemmer med kønnet på personen (hvis du har dette).

Disse tjek bør under alle omsændigheder laves selvom du også laver et modulus-aa tjek.
Avatar billede arne_v Ekspert
10. september 2006 - 22:36 #5
følgende er noget C# kode porteret fra noget Java kode porteret fra noget C kode:

using System;

namespace E
{
    public class CPR
    {
      private string number;
      public CPR(string number)
      {
          this.number = number;
      }
      public bool IsValid()
      {
          int[] ix = { 0, 1, 2, 3, 4, 5, 7, 8, 9, 10 };
          int[] c = { 4, 3, 2, 7, 6, 5, 4, 3, 2, 1 };
          if (number.Length != 11)
          {
            return false;
          }
          if (number[6] != '-')
          {
            return false;
          }
          for (int i = 0; i < 10; i++)
          {
              if (!Char.IsDigit(number[ix[i]]))
              {
                  return false;
              }
          }
          if (dd() > 31)
          {
            return false;
          }
          if (mm() > 12)
          {
            return false;
          }
          if (century() == 0)
          {
            return false;
          }
          int temp = 0;
          for (int i = 0; i < 10; i++)
          {
            temp = temp + c[i] * int.Parse(number.Substring(ix[i], 1));
          }
          return ((temp % 11) == 0);
      }
      public bool IsMale() {
          return int.Parse(number.Substring(10,1)) % 2 == 1;
      }
      public bool IsFemale() {
          return int.Parse(number.Substring(10,1)) % 2 == 0;
      }
      private int dd()
      {
          return int.Parse(number.Substring(0, 2));
      }
      private int mm()
      {
          return int.Parse(number.Substring(2, 2));
      }
      private int yy()
      {
          return int.Parse(number.Substring(4, 2));
      }
      private int century() {
          switch (number[7]) {
              case '0' :
              case '1' :
              case '2' :
              case '3' :
                  return 1900;
              case '4' :
              case '9' :
                  if (yy() < 37)
                      return 2000;
                  else
                      return 1900;
              case '5' :
              case '6' :
              case '7' :
              case '8' :
              if (yy() < 37)
                  return 2000;
              else if (yy() > 57)
                  return 1800;
              else
                  return 0;
              default :
                  return 0;
          }
      }
    }
    public class TestClass
    {
        private static void Test(string s)
        {
            CPR nr = new CPR(s);
            Console.WriteLine(s + " valid: " + nr.IsValid());
        }
        public static void Main(string[] args)
        {
            Test("123456-1234");
            Test("111111-1118");
        }
    }
}
Avatar billede krestionsen Nybegynder
14. september 2006 - 16:47 #6
Hej mcnovy, hvordan laver man sådan at brugeren kan vælge sådan en kalender ved siden af en textbox, har du et eksempel på det?
Avatar billede nielle Nybegynder
14. september 2006 - 17:37 #7
Du skal bruge en DateTimePicker i stedet for en TimeBox.
Avatar billede nielle Nybegynder
14. september 2006 - 17:37 #8
"TimeBoks" læses som TextBox...
Avatar billede krestionsen Nybegynder
17. september 2006 - 10:32 #9
Har du et eksempel på det?
Avatar billede nielle Nybegynder
17. september 2006 - 10:58 #10
Ikke helt forstået, hvad mener du med et eksempel?

Hvis du bruger Visual Studio skal du simpelthen trække en DateTimePicker-kontrol ind på det sted hvor du lige nu har en TextBox-kontrol til dit datofelt.
Avatar billede krestionsen Nybegynder
26. september 2006 - 14:13 #11
Jeg bruger visual web developer 2005 express edition og jeg synes ikke jeg kan finde den datetimepicker, er der et eller andet jeg skal have slået til for at se den?
Avatar billede nielle Nybegynder
26. september 2006 - 19:01 #12
Jeg bruger selv Visual Studio Professionel, men jeg kan ikke se nogen grund til at DateTimePicker ikke også skulle være at finde i Express.

Hvis du ikke allerede har Toolbox ude i venstre side, starter du med at gå op under menuen View og vælger her Toolbox.

Derefter kigger du - i Toolbox - enten under "All Windows Forms" hvor at den bør ligge lige under "DataSet" kontrollen, eller under "Common Controls" hvor den bør ligge lige under "ComboBox".

Din form skal dog være i Design-view, ellers ser du slet ingen kontroller i Toolbox.
Avatar billede nielle Nybegynder
26. september 2006 - 19:03 #13
Hov, du skriver at du bruger "visual web developer" ... det er altså en web-applikation du er ved at lave. Det burde du nok have nævnt allerede fra starten. Faktisk har Eksperten en kategori til dette formål (ASP.Net) og derfor er det mest Windows-kode som præsenteres her i denne kategori.
Avatar billede nielle Nybegynder
26. september 2006 - 19:35 #14
Glem bare det vi hare skrevet indtil nu ... det gælder for Windows-applikationer. I en web-applikation gøres det anderledes:

Når du har en TextBok på din side kan du f.eks. trække en RegularExpressionValidator ind på siden. Sæt dennes ControlToValidate lig med din TextBox.

Hvis TextBox'en skal validere et CPR-nummer, på formen "123456-7890", gøres dette ved at sætte RegularExpressionValidator'ens ValidationExpression til:

\d{6}-\d{4}

Sæt også dens ErrorMessage til noget sigende.

Hvis TextBox'en skal validere en dato på formen 26-09-2006, gøres det ved at sætte ValidationExpression til:

\d{2}-\d{2}-\d{4}

- eller:

\d{1,2}-\d{1,2}-\d{4}

- hvis det også skal være lovligt at skrive 26-9-2006.

Hvis mønsteret skal udvides til at udelukke ulovlige datoer, f.eks. 99-99-9999, kan man lave forskellige variationer på dette. Alternativt kan du vælge at bruge en Calendar da du så er helt sikker på at der også tages højde for skudår.
Avatar billede nielle Nybegynder
03. oktober 2006 - 09:00 #15
Har du fået kigget på det?
Avatar billede krestionsen Nybegynder
30. oktober 2006 - 16:03 #16
Ja, jeg har fået kigget på det og kan du ikke lige lægge et svar og hvordan tester jeg på de kun skriver tal?
Avatar billede nielle Nybegynder
31. oktober 2006 - 06:58 #17
Til det formål kan du enten vælge at bruge en RangeValidator, eller du kan bruge en RegularExpressionValidator med mønsteret:

\d+

hvis det skal være et heltal) eller

\d+(,d+)

hvis det skal være et kommatal.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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