2015-05-27 36 views
8

Tôi đã xem this questionthis blog cho biểu thức PAN. [A-Z]{5}[0-9]{4}[A-Z]{1}. Nhưng câu hỏi của tôi hơi mở rộng hơn một chút.Biểu thức chính quy xác nhận số thẻ PAN

Trong một số thẻ 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. 

Tôi muốn các regex để được kiểm tra trên cơ sở đó. Vì tôi có Tên của người đó hoặc Tổ chức trong một EditText khác, tôi cần phải xác minh thêm thư thứ 4 và thứ 5.

Hóa ra là [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}

Tôi không thể tìm ra làm thế nào mà một cái gì đó phải được viết ra.

Có lập trình, có thể thực hiện, someone has done it in rails nhưng có thể thực hiện thông qua regex không? Làm sao?

+1

bạn đã thử (P | [C, H, F, A, T, B, L, J, G]) –

+0

có thể không có khả năng hiểu được điểm thứ 3. Có bao nhiêu ký tự? –

+0

@AvinashRaj nếu ký tự thứ tư trong số thẻ PAN là P, thì ký tự thứ năm sẽ là chữ cái đầu tiên của họ của bạn, Ví dụ: Nếu bạn là Avinash Raj, nhân vật thứ 4 của số bánh sẽ là P cho cá nhân và nhân vật thứ năm sẽ là R của Raj. Trong khi thẻ PAN thuộc về Tổ chức, giả sử một công ty sau đó là ký tự thứ tư là C cho Công ty và ký tự thứ năm là chữ cái đầu tiên của tên công ty, ví dụ: nếu có một công ty được gọi là "Tập đoàn Microsoft", thì ký tự thứ tư sẽ là "C" cho Công ty và ký tự thứ năm sẽ là "M" cho Microsoft. – inquisitive

Trả lời

4

Regex bạn có thể sử dụng với matches() được hình thành dựa trên đầu vào bổ sung từ người dùng và kiểm tra phía sau ký tự thứ 4 trước đó. Nếu chữ thứ 4 là P, chúng tôi kiểm tra chữ cái đầu tiên trong tên họ, và nếu bức thư thứ 4 không phải là P, chúng tôi kiểm tra chữ cái đầu tiên trong tên thực thể:

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(); 
} 
Các vấn đề liên quan