Buenas!
Doy por hecho que hablamos del NIF español, te dejo una función que hice en su día, espero que te sirva.
<pre lang='java' lineno='1'>public class Validar {
public boolean nif(String n) throws NifNoValidoExcepcion{
Pattern patron=Pattern.compile("\d{3,8}\-[azA-Z]{1}");
Matcher m=patron.matcher(n);
if( m.matches()){
if( this.validarLetra(n))
return true;
throw new NifNoValidoExcepcion();
}
throw new NifNoValidoExcepcion();
//return false;
}
private boolean validarLetra(String n){
String[] nif=n.split("-");
int letra=(Integer.valueOf(nif[0]).intValue())%23;
String[] abc={"T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E","T"};
if(abc[letra].compareToIgnoreCase(nif[1])==0){
return true;
}
return false;
}
}