How to verify PAN card?

This is perfect PAN number RegEx: :

String panNumber = "AAAPL1234C"; // get your editext value here
Pattern pattern = Pattern.compile("[A-Z]{3}[ABCFGHLJPTF]{1}[A-Z]{1}[0-9]{4}[A-Z]{1}");

Matcher matcher = pattern.matcher(panNumber );
// Check if pattern matches 
if (matcher.matches()) {
    Log.i("Matching","Yes");
}

There are some condition for PAN number as follow :

The PAN (or PAN number) is a ten-character long alpha-numeric unique identifier.

The PAN structure is as follows: AAAPL1234C:

The first five characters are letters (in uppercase by default), followed by four numerals, and the last (tenth) character is a letter. The first three characters of the code are three letters forming a sequence of alphabets letters from AAA to ZZZ

The fourth character identifies the type of holder of the card. Each holder type is uniquely defined by a letter from the list below:

  • A — Association of persons (AOP)
  • B — Body of individuals (BOI)
  • C — Company
  • F — Firm
  • G — Government
  • H — HUF (Hindu undivided family)
  • L — Local authority
  • J — Artificial juridical person
  • P — Individual (proprietor)
  • T — Trust (AOP)
  • F – LLP (limited liability partnership)

The fifth character of the PAN is the first character of either:

  • of the surname or last name of the person, in the case of a "personal" PAN card, where the fourth character is "P" or
  • of the name of the entity, trust, society, or organisation in the case of a company/HUF/firm/AOP/trust/BOI/local authority/artificial judicial person/government, where the fourth character is "C", "H", "F", "A", "T", "B", "L", "J", "G". The last (tenth) character is an alphabetic digit used as a check-sum to verify the

@Raghunandan is right. You can use regex. If you see wiki entry for Permanent_account_number(India) you'll get the meaning of the PAN card number formation. You can use the pattern to check for its validity. Relevant portion is as follows:

PAN structure is as follows: AAAAA9999A: First five characters are letters, next 4 numerals, last character letter.

1) The first three letters are sequence of alphabets from AAA to zzz
2) The fourth character informs about the type of holder of the Card. Each assesse is unique:`

    C — Company
    P — Person
    H — HUF(Hindu Undivided Family)
    F — Firm
    A — Association of Persons (AOP)
    T — AOP (Trust)
    B — Body of Individuals (BOI)
    L — Local Authority
    J — Artificial Judicial Person
    G — Government


3) The fifth character of the PAN is the first character
    (a) of the surname / last name of the person, in the case of 
a "Personal" PAN card, where the fourth character is "P" or
    (b) of the name of the Entity/ Trust/ Society/ Organisation
in the case of Company/ HUF/ Firm/ AOP/ BOI/ Local Authority/ Artificial Jurdical Person/ Govt,
where the fourth character is "C","H","F","A","T","B","L","J","G".

4) The last character is a alphabetic check digit.

`

Hope this helps.


You can use Regular Expression with pattern matching

String s = "ABCDE1234F"; // get your editext value here
Pattern pattern = Pattern.compile("[A-Z]{5}[0-9]{4}[A-Z]{1}");
   
Matcher matcher = pattern.matcher(s);
// Check if pattern matches 
if (matcher.matches()) {
  Log.i("Matching","Yes");
}   

// [A-Z]{5} - match five literals which can be A to Z
// [0-9]{4} - followed by 4 numbers 0 to 9
// [A-Z]{1} - followed by one literal which can A to Z

You can test regex @

http://java-regex-tester.appspot.com/

http://docs.oracle.com/javase/tutorial/essential/regex/

Update

Another anser that is complete Regular expression validating PAN card number the 5th char depends on 4th char.