private void putCard (Context ctx, ISOMsg m, boolean mandatory, Set<String> validFields, Result rc) {
boolean hasCard = m.hasAny("2", "14", "35", "45");
if (!mandatory && !hasCard)
return;
try {
Card.Builder cb = Card.builder().isomsg(m);
if (ignoreCardValidation)
cb.validator(null);
Card card = cb.build();
ctx.put (ContextConstants.CARD.toString(), card);
if (card.hasTrack1())
validFields.add("45");
if (card.hasTrack2())
validFields.add("35");
if (card.getPan() != null && m.hasField(2))
validFields.add("2");
if (card.getExp() != null && m.hasField(14))
validFields.add("14");
} catch (InvalidCardException e) {
validFields.addAll(Arrays.asList("2", "14", "35", "45"));
if (hasCard) {
rc.fail(CMF.INVALID_CARD_NUMBER, Caller.info(), e.getMessage());
} else if (mandatory) {
rc.fail(CMF.MISSING_FIELD, Caller.info(), e.getMessage());
}
}
}