anchor.diff:  				if(isEmptyInput(arguments.input)) {
   					if(arguments.allowNull)
   						return "";
  -					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Input credit card required", "Input credit card required: context=" & arguments.context & ", input=" & arguments.input, arguments.context));
  +					userParams = [arguments.context];
  +					logParams = [arguments.context, arguments.input];
  +					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardValueMissing.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardValueMissing.logMessage", logParams), arguments.context));
   				}
   
   				canonical = getValidInput(arguments.context, arguments.input, "CreditCard", variables.MAX_CREDIT_CARD_LENGTH, arguments.allowNull);
   
   				// perform Luhn algorithm checking
  -					digitsOnly = newJava("java.lang.StringBuffer").init();
  -					c = "";
  -					for(i = 0; i < canonical.length(); i++) {
  -						c = canonical.charAt(i);
  -						if(newJava("java.lang.Character").isDigit(c)) {
  -							digitsOnly.append(c);
  +				digitsOnly = newJava("java.lang.StringBuffer").init();
  +				c = "";
  +				for(i = 0; i < canonical.length(); i++) {
  +					c = canonical.charAt(i);
  +					if(newJava("java.lang.Character").isDigit(c)) {
  +						digitsOnly.append(c);
  +					}
  +				}
  +
  +				sum = 0;
  +				digit = 0;
  +				addend = 0;
  +				timesTwo = false;
  +
  +				for(i = digitsOnly.length() - 1; i >= 0; i--) {
  +					digit = newJava("java.lang.Integer").parseInt(digitsOnly.substring(i, i + 1));
  +					if(timesTwo) {
  +						addend = digit * 2;
  +						if(addend > 9) {
  +							addend -= 9;
   						}
   					}
  -
  -					sum = 0;
  -					digit = 0;
  -					addend = 0;
  -					timesTwo = false;
  -
  -					for(i = digitsOnly.length() - 1; i >= 0; i--) {
  -						digit = newJava("java.lang.Integer").parseInt(digitsOnly.substring(i, i + 1));
  -						if(timesTwo) {
  -							addend = digit * 2;
  -							if(addend > 9) {
  -								addend -= 9;
  -							}
  -						}
  -						else {
  -							addend = digit;
  -						}
  -						sum += addend;
  -						timesTwo = !timesTwo;
  -					}
  -
  -					modulus = sum % 10;
  -					if(modulus != 0)
  -						throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Invalid credit card input", "Invalid credit card input: context=" & arguments.context, arguments.context));
  -
  -					return canonical;
  -				}
  +					else {
  +						addend = digit;
  +					}
  +					sum += addend;
  +					timesTwo = !timesTwo;
  +				}
  +
  +				modulus = sum % 10;
  +				if(modulus != 0) {
  +					userParams = [arguments.context];
  +					logParams = [arguments.context];
  +					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardBadInput.userMessage", userParams), variables.ESAPI.resourceBundle().messageFormat("Validator.creditCardBadInput.logMessage", logParams), arguments.context));
  +				}
  +
  +				return canonical;
  +			}
   		</cfscript>
   
   	</cffunction>
  
positive.code: 
  					// the path is valid if the input matches the canonical path
  					if(!arguments.input.equals(cpath.toLowerCase())) {
  						throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(ESAPI=variables.ESAPI, userMessage=arguments.context & ": Invalid file name", logMessage="Invalid directory name does not match the canonical path: context=" & arguments.context & ", input=" & arguments.input & ", canonical=" & canonical, context=arguments.context));
  					}
  				}
  				catch(java.io.IOException e) {
  					throwException(createObject("component", "org.owasp.esapi.errors.ValidationException").init(variables.ESAPI, arguments.context & ": Invalid file name", "Invalid file name does not exist: context=" & arguments.context & ", canonical=" & canonical, e, arguments.context));
  				}
  				catch(org.owasp.esapi.errors.EncodingException ee) {
  					throwException(createObject("component", "org.owasp.esapi.errors.IntrusionException").init(variables.ESAPI, arguments.context & ": Invalid file name", "Invalid file name: context=" & arguments.context & ", canonical=" & canonical, ee));
  				}
  
  				// verify extensions
  
negative.code: 			var addend = "";
  			var timesTwo = "";
  			var modulus = "";
  			var userParams = [];
  			var logParams = [];
  
  			if(structKeyExists(arguments, "errorList")) {
  
  