2015-05-27 3 views
8

Я видел this question и this blog для регулярного выражения PAN. [A-Z]{5}[0-9]{4}[A-Z]{1}. Но мой вопрос немного шире, чем это.Регулярное выражение, подтверждающее номер карты PAN

В ряде PAN карты:

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. 

Я хочу, чтобы регулярное выражение, чтобы проверять на основе этого. Поскольку я получаю имя человека или организацию в другом EditText, мне нужно было дополнительно проверить 4-ю и 5-ю букву.

Это оказывается [A-Z]{3}[C,H,F,A,T,B,L,J,G,P]{1}**something for the fifth character**[0-9]{4}[A-Z]{1}

Я не могу понять, как что-то должно быть написано.

Программно, это можно сделать, someone has done it in rails, но может быть сделано с помощью регулярного выражения? Как?

+1

пытались ли вы (P | [C, H, F, A, T, B, L, J, G]) –

+0

не в состоянии понять, 3-й пункт. Сколько символов присутствует? –

+0

@AvinashRaj, если четвертый символ в номере карты PAN равен P, тогда пятый символ будет первой буквой вашей фамилии, например. Если вы Avinash Raj, ваш четвертый персонаж вашего панкарда будет P для персонажа, а пятым персонажем будет R Raj. Если PAN-карта принадлежит Организации, пусть, например, компания, то четвертый символ - C для Компании, а пятый символ - первая буква имени компании, например, если есть компания, названная «Microsoft Corporation», тогда четвертый символ будет «C» для Компании, а пятый символ будет «M» для Microsoft. – inquisitive

ответ

4

Регулярное выражение, которое вы можете использовать с matches(), формируется на основе дополнительного ввода от пользователей и проверки обратного хода для предыдущего 4-го символа. Если четвёртая буква P, мы проверяем для первой буквы в фамилии, а если четвёртое письмо не P, мы проверяем первую букву в названии объекта:

String rx = "[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]"; 

Sample code:

String c1 = "S"; // First letter in surname coming from the EditText (with P before) 
String c2 = "F"; // First letter in name coming from another EditText (not with P before) 
String pan = "AWSPS1234Z"; // true 
System.out.println(pan.matches("[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]")); 
pan = "AWSCF1234Z"; // true 
System.out.println(pan.matches("[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]")); 
pan = "AWSCS1234Z"; // false 
System.out.println(pan.matches("[A-Z]{3}([CHFATBLJGP])(?:(?<=P)" + c1 + "|(?<!P)" + c2 + ")[0-9]{4}[A-Z]")); 
1

enter image description here

Pan= edittextPan.getText().toString().trim(); 

Pattern pattern = Pattern.compile("[A-Z]{5}[0-9]{4}[A-Z]{1}"); 

Matcher matcher = pattern .matcher(Pan); 

if (matcher .matches()) { 
Toast.makeText(getApplicationContext(), Pan+" is Matching", 
Toast.LENGTH_LONG).show(); 

} 
else 
{ 
Toast.makeText(getApplicationContext(), Pan+" is Not Matching", 
Toast.LENGTH_LONG).show(); 
} 
Смежные вопросы