Как предусмотреть все символы из таблиц кодировок

Задача: Банкоматы допускают 4 или 6-значные ПИН-коды, а ПИН-коды не могут содержать ничего, кроме 4 цифр или 6 цифр. Если функции передана правильная строка PIN, верните true, иначе верните false.

Проблема: Нам подаются разные символы, например пробел или вот такой 9¾. Я предусмотрел в коде варианты по ASCII таблицы, а вот откуда другие символы появляются для теста не совсем понимаю. Знаю, что есть другие таблицы кодировок, но как тогда можно все варианты предусмотреть?

Код:

public static boolean validatePin(String pin) {
    char[] chArray = pin.toCharArray();
        for (char a = 1; a <= 47; a++) {
            for (char b = 58; b < 128; b++) {
            for (int i = 0; i < chArray.length; i++) {
                if (chArray[i] == a || chArray[i] == b) {
                    return false;
                }
                }
            }
            }

        if (chArray.length == 4 || chArray.length == 6) {
            return true;
        }
        else return false;
  }

Ответы (2 шт):

Автор решения: Olmicron
Pattern.compile("^\\d+$").matcher(pin).find()

UPD: Что означают символы:

  • начало строки: ^
  • конец строки: $
  • цифровой символ: \d
  • повторяется один или более раз: +

Подробнее о регулярных выражениях можно прочитать, например, здесь

→ Ссылка
Автор решения: Blacit

Конечный код, с помощью комментария получилось уменьшить.

public static boolean validatePin(String pin) {
    char[] chArray = pin.toCharArray();
        for (int i = 0; i < chArray.length; i++) {
                if (chArray[i] <= 47 || chArray[i] >= 58) {
                    return false;
                }
            }

        if (chArray.length == 4 || chArray.length == 6) {
            return true;
        }
        else return false;
  }
→ Ссылка