计算社会安全号码的最后一个字母

时间:2014-10-08 09:48:56

标签: java

该代码的目的是解决瑞典身份证号码中的最后一位数字,但它似乎无法正常工作。该算法在此处描述:wikipedia

import java.util.Scanner;
public class pers5 {

public static void main(String[] args) {

    int k0=0,k1=0,k2=0,k3=0,k4=0,k5=0,k6=0,k7=0,k8=0;

    System.out.print("Skriv in ett personnummer: ");
    String indata = new Scanner(System.in).nextLine();
    for (int i=0; i<9; i++){
        int nummer=indata.charAt(i) -48;
            System.out.print(indata.charAt(i)+ " ");
            System.out.println(indata.charAt(i));


    int tal0 = indata.charAt(0);
    int tal1 = indata.charAt(1);
    int tal2 = indata.charAt(2);
    int tal3 = indata.charAt(3);
    int tal4 = indata.charAt(4);
    int tal5 = indata.charAt(5);
    int tal6 = indata.charAt(6);
    int tal7 = indata.charAt(7);
    int tal8 = indata.charAt(8);

    k0=tal0*2;
    k1=tal1;
    k2=tal2*2;
    k3=tal3;
    k4=tal4*2;
    k5=tal5;
    k6=tal6*2;
    k7=tal7;
    k8=tal8*2;

以下是解决最后一个数字的部分:

    int sum = 0;
    while (k0 != 0) {
      sum += k0 % 10;
      k0 /= 10;
    }
    System.out.println("Sum of digits: " + sum);}
}

现在它显然只能解决k0的总和,但这就是我需要的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我从你的个人资料中猜到你在谈论瑞典的个人身份号码。

首先,talX变量出错。您忘记减去48(或以其他方式解析字符以获取int值)。

要回答您的问题 - 您应该删除所有:

int sum = 0;
while (k0 != 0) {
  sum += k0 % 10;
  k0 /= 10;
}

对于第一个数字,这将正常工作:

System.out.println("Sum of digits: " + (k0%10 + k0/10))

这就是你问的问题,但为了解决整个问题,我建议你重构代码。 k0k1等变量不容易迭代。尝试创建一个数组(或甚至计算for (int i=0; i<9; i++)循环中的下一个数字总和)。

例如:

for (int i=0; i<9; i++){
    int nummer = indata.charAt(i) - 48;
    int multiplied = nummer*((i+1)%2)+1); // it will multiply by 2 or 1 (depending on digit position)
    int sum = multiplied%10 + multiplied/10 // sum of digits
    System.out.println("The sum for " + i + " digit is: " + sum); 

当然,您可以使用k0k1,...但您的代码将会非常冗长和复杂。