Проверка идентификационного номера Турции - PullRequest
0 голосов
/ 04 декабря 2018

Как я могу убедиться, что данный текст является турецким идентификационным номером?Я видел js версию здесь и phthon версию здесь

Кроме того, пару дней назад опубликовал вопрос о swift версии здесь .

Turkish Identity Verification не проверяет, только если она числовая, она также имеет некоторые другие функции.Позвольте мне быть более ясным, он числовой и имеет 11 цифр.Например Предположим, что первые 9 цифр представлены d, а последние представлены c:

Identity Number = d1 d2 d3 d4 d5 d6 d7 d8 d9 c1 c2

10-я цифра должна быть,

c1 = ( (d1 + d3 + d5 + d7 + d9) * 7 - (d2 + d4 + d6 + d8) ) mod10

11-е должно быть

c2 = ( d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + c1 ) mod10

, и оно никогда не начинается с «0».Например, «87836910956» - это турецкий идентификационный номер.

Теперь я должен использовать эту проверку в Android / Java.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы можете немного сократить его, не теряя читабельность:

private static boolean verifyNumber(String nationalityNumberStr) {
    if(nationalityNumberStr.startsWith("0") || !nationalityNumberStr.matches("[0-9]{11}") ){
        return false;
    }

    int [] temp = new int [11];
    for (int i = 0; i < 11; i++){
        temp[i] = Character.getNumericValue(nationalityNumberStr.toCharArray()[i]);
    }

    int c1 = 0;
    int c2 = temp[9];
    for(int j = 0; j < 9; j++){
        if(j%2 == 0) {
           c1 += temp[j] * 7;
        }
        else {
           c1 -=  temp[j];
        }
        c2 += temp[j];
    }

    return  temp[9]== c1 % 10 && temp[10] == c2 %10;
}
0 голосов
/ 04 декабря 2018

Вот как я оказался:

   private static boolean verifyNumber(String nationalityNumberStr) {
            try {
                String tmp = nationalityNumberStr;

                if(tmp.toCharArray()[0] != '0'){
                    //cannot start with 0
                    if (tmp.length() == 11) {
                        //should be 11 digits
                        int totalOdd = 0;

                        int totalEven = 0;

                        for (int i = 0; i < 9; i++) {
                            int val = Integer.valueOf(tmp.substring(i, i + 1));

                            if (i % 2 == 0) {
                                totalOdd += val;
                            } else {
                                totalEven += val;
                            }
                        }

                        int total = totalOdd + totalEven + Integer.valueOf(tmp.substring(9, 10));

                        int lastDigit = total % 10;

                        if (tmp.substring(10).equals(String.valueOf(lastDigit))) {
                            int check = (totalOdd * 7 - totalEven) % 10;

                            if (tmp.substring(9, 10).equals(String.valueOf(check))) {
                                return true;
                            }
                        }
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

            return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...