Se o último caractere deve ser B
ou N
, a condição em seu código está incorreta.
Em vez de
(!ref.toUpperCase().endsWith("B")) || (!ref.toUpperCase().endsWith("N"))
deve ser
(!ref.toUpperCase().endsWith("B")) && (!ref.toUpperCase().endsWith("N"))
Você precisa de and
em vez de or
.
Leia assim: "Se a última letra não for B e a última letra não for N, então o erro" .