Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


kontrollera personnummer

Postades av 2007-05-22 09:17:27 - Marcus Wennerberg, i forum java, Tråden har 6 Kommentarer och lästs av 7572 personer

Hej

Jag beöver hjälp med en metod som ska validera personnummret på formlen ååååmmdd-xxxx.
Den ska kontrollera så kontroll siffran stämmer.

Hittade denna via google:

<code>
public class PersonNummer {

public static void main(String[] args) {
String pnr = ""; //byt ut mot "YYMMDDXXXX"
if(isPnrLegal(pnr)) {
System.out.println("Giltligt!");
}
else {
System.out.println("Ogiltligt!");
}

}

public static boolean isPnrLegal(String s) {
int[] pnr = stringToArray(s);
int control = calculateControlNumber(pnr);
return pnr[pnr.length-1] == control;
}


private static int[] stringToArray(String s) {
int arr[] = new int[s.length()];

for(int i = 0; i < s.length(); i++) {
arr[i] = (new Integer("" + s.charAt(i))).intValue();
}
return arr;
}

private static int calculateControlNumber(int[] arr) {
int checkSum = 0;
int temp = 0;
int controlNumber;

for(int i = 0; i < 9; i++) {
if(i % 2 == 0) {
temp = 2*arr[i];
if(temp >= 10) {
checkSum = checkSum + 1 + (temp - 10);
}
else {
checkSum = checkSum + temp;
}
}
else {
checkSum = checkSum + arr[i];
}
}
controlNumber = 10 - checkSum % 10;
if(controlNumber == 10) {
controlNumber = 0;
}
return controlNumber;
}
}
</code>


Men vet inte redigt hur jag ska lösa det. Man ska skick in strängen med personnummret till metoden sen så ska tru eller false returneras.

Hur löser jag detta??

Tacksam för all hjälp


Svara

Sv: kontrollera personnummer

Postades av 2007-05-22 14:19:35 - jonas ekenberg

Deklarera klassen PersonNummer så här:
(Lyft bara ut main-funktionen)


public class PersonNummer {


public static boolean isPnrLegal(String s) {
int[] pnr = stringToArray(s);
int control = calculateControlNumber(pnr);
return pnr[pnr.length-1] == control;
}


private static int[] stringToArray(String s) {
int arr[] = new int[s.length()];

for(int i = 0; i < s.length(); i++) {
arr[i] = (new Integer("" + s.charAt(i))).intValue();
}
return arr;
}

private static int calculateControlNumber(int[] arr) {
int checkSum = 0;
int temp = 0;
int controlNumber;

for(int i = 0; i < 9; i++) {
if(i % 2 == 0) {
temp = 2*arr[i];
if(temp >= 10) {
checkSum = checkSum + 1 + (temp - 10);
}
else {
checkSum = checkSum + temp;
}
}
else {
checkSum = checkSum + arr[i];
}
}
controlNumber = 10 - checkSum % 10;
if(controlNumber == 10) {
controlNumber = 0;
}
return controlNumber;
}
}

Anropa utanför klassen:

boolean legal= PersonNummer.isPnrLegal("ååååmmdd-xxxx");


Svara

Sv:kontrollera personnummer

Postades av 2007-05-23 07:55:51 - Marcus Wennerberg

tack, men jag får ett felmeddelande:
For input string: "-"

jag skickar in ett 12 siffrígt samt ett -.

Personnummerkontrollen tillåter inte ett - i födelsenummret?

Då måste man ju plocka bort - från födelsedatummet.
Hur får jag denna att fungera??


Svara

Sv: kontrollera personnummer

Postades av 2007-05-23 09:05:56 - Martin Adrian

Varför göra det så komplicerat?

Brukar göra så här för att kolla personnummer
(är dock inte så bra på java. Kan man använda foreach på string?)

bool checkpnr(string pnr) {
  int digitcount = 0;
  int sum = 0;
  for (int ii = 0; ii < pnr.length(); ++ii) {
    char c = pnr.charAt(ii);
    int digit = Character.digit(c,10);
    if (digit < 0) {
      if (c == " " || c == "-") // vilka tecken som är tillåtna
        continue;
      else
	return false; // ogiltigt tecken
    }
    if (digitcount % 2 == 0) {
      if (digit >= 5)
        digit = digit * 2 - 9;
      else
        digit = digit * 2
    }
    sum = sum + digit;
    ++digitcount;
  }
  return digitcount == 10 && sum % 10 == 0;
}


Svara

Sv:kontrollera personnummer

Postades av 2007-05-23 10:59:25 - Marcus Wennerberg

ok, tack för det exemplet, men skulle vara kul att få den andra att fungera oxå :D

har nu följand ekod iaf:

<code>
public static boolean isPnrLegal(String s)
{
String ss = s;
ss = ss.replace("-","");


int[] pnr = stringToArray(ss);


int control = calculateControlNumber(pnr);
return pnr[pnr.length-1] == control;
}


private static int[] stringToArray(String s)
{
int arr[] = new int[s.length()];

for(int i = 0; i < s.length(); i++)
{
arr[i] = (new Integer("" + s.charAt(i))).intValue();
}
return arr;
}

private static int calculateControlNumber(int[] arr)
{
int checkSum = 0;
int temp = 0;
int controlNumber;

for(int i = 0; i < 12; i++)
{
if(i % 2 == 0)
{
temp = 2*arr[i];
if(temp >= 12)
{
checkSum = checkSum + 1 + (temp - 12);
}
else
{
checkSum = checkSum + temp;
}
}
else
{
checkSum = checkSum + arr[i];
}
}
controlNumber = 12 - checkSum % 12;
if(controlNumber == 12)
{
controlNumber = 0;
}
return controlNumber;
}
</code>


men den säger bara att det är fel, även när det är ett rätt personnummer.

vad kan det vara för fel??


Svara

Sv: kontrollera personnummer

Postades av 2007-05-23 11:54:21 - David Tellander

Du kan inte bara byta ut 10 mot 12 i algorimen, eftersom kontrollsiffran genererats med de nio första siffrorna: ååmmddxxx.
Algoritmen som används är känd som "Luhn algoritmen" eller "modulo 10-algoritmen", se t.ex. en.wikipedia.org/wiki/Luhn.
För att den implementation du har ska funka måste du ta bort sekelsiffrorna och '-' innan du validerar.
s.substring(2) bör funka för att bli av med sekelsiffrorna.


Svara

Sv:kontrollera personnummer

Postades av 2007-05-23 12:11:02 - Marcus Wennerberg

tack, nu funkar den :D


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 155
27 952
271 704
1 699
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies