取string(内含long数字类型)类型的第17位数字出错

import java.util.*;
public class IfPractice{
        public static void main(String[] args){
            /* 1.录入身份证号 
               2.判定性别
               3.判定个人年龄是否能结婚(中间录入年龄)
               4.判定双方是否都到达法定结婚年龄
               5.输出结果:能否结婚
            */
        Scanner input = new Scanner(System.in);
        //录入身份证号
        System.out.print("请输入身份证号(前面加一个g)");
        //String IDnum =input.next();
        String IDnum = input.next();
        //取身份证号第17位(奇数为男性,偶数为女性)
        int bt = IDnum.charAt(19);
        System.out.println(bt);
        //取余
         int ba = bt%2;
        //判定男女
        if(ba==1){
            System.out.println("您是男性");
        }
        
        }
}



运行时出错:
C:\Users\1\java.code>java IfPractice
请输入身份证号(前面加一个g)g12345678910123456
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 19
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:711)
at IfPractice.main(IfPractice.java:16)r

取身份证17位,应该为
int bt = IDnum.charAt(17);
角标从0开始,g = IDnum.charAt(0);
17位则为 IDnum.charAt(17)

以上报错: java.lang.StringIndexOutOfBoundsException
为数组越界, 长度为19,角标19为第20位

字符串取第17位,是charAt(17),不是19。这个最后一位一定是数字吗?另外身份证号一定这么长嘛?不是还有15位身份证号的嘛?

越界了

import java.util.Scanner;

public class IfPractice {
    public static void main(String[] args) {
        /*
         * 1.录入身份证号 2.判定性别 3.判定个人年龄是否能结婚(中间录入年龄) 4.判定双方是否都到达法定结婚年龄 5.输出结果:能否结婚
         */
        Scanner input = new Scanner(System.in);
        // 录入身份证号
        System.out.print("请输入身份证号(前面加一个g)");
        // 取身份证号第17位(奇数为男性,偶数为女性)
        System.out.println(input.next().charAt(17) % 2 == 1 ? "您是男性" : "您是女性");
        input.close();
    }

}