package dataProfileWebSite;

public class MaskIfPan 
{
	public MaskIfPan()
	{
		;
	}

	public String mask(String candidatePan)
	{
		StringBuffer field;
		StringBuffer maskedPan;
		int i;
		int firstDigit;
		int lastDigit;
		boolean done;

		field = new StringBuffer(candidatePan);
		maskedPan = new StringBuffer("");
		firstDigit = -1;
		lastDigit = 0;
		if (field.length() >= 12)
		{
			done = false;
			for (i = 0; !done; i++)
			{
				if (i >= field.length())
				{
					done = true;
				}
				else
				{
					if(Character.isDigit(field.charAt(i)))
					{
						if (firstDigit == -1)
						{
							firstDigit = i;
						}
						lastDigit = i;
					}
					else
					{
						if (firstDigit != -1)
						{
							if 
							(
								(field.charAt(firstDigit) != '0') && 
								(lastDigit - firstDigit >= 12) && 
								(lastDigit - firstDigit <= 19)
							)
							{
								done = true;
							}
							else
							{
								firstDigit = -1;
								lastDigit = 0;								
							}
						}
					}
				}
			}
			if ((firstDigit != -1) && (lastDigit == 0))
			{
				lastDigit = i - 1;
			}
			if 
			(
				(firstDigit >= 0) && 
				(field.charAt(firstDigit) != '0') && 
				(lastDigit - firstDigit >= 12) && 
				(lastDigit - firstDigit <= 19)
			)
			{
				for (i = 0; i < field.length(); i++)
				{
					if (((i >= firstDigit + 6) && (i < lastDigit - 4)) || (i > lastDigit))
					{
						maskedPan.append('*');
					}
					else
					{
						maskedPan.append(field.charAt(i));
					}					
				}
				return maskedPan.toString();
			}
			return field.toString();
		}
		else
		{
			return field.toString();
		}
	}
}
