Re:Why do credit card forms ask for Visa, Mastercard, etc.?
by bjconlan on Friday January 31, 2014 @09:44PM
(#7160636)
I also did one in javascript (i've requested it be ammended to the accepted response but we'll see how it reviews) anyway here it is:
function validateCC(ccNumber) {
var ccNumber = ccNumber.replace(/ /g, '');
console.log(
/^3[4|7]\d{13}/.test(ccNumber) ? 'AMEX' :
/^6011\d{12}/.test(ccNumber) ? 'Discover' :
/^5[1-5]\d{14}/.test(ccNumber) ? 'MasterCard' :
/^4[\d{12}|\d{15}]/.test(ccNumber) ? 'Visa' : 'Unknown',
ccNumber,
ccNumber.split('').reverse()
.map(function (v, i) { return v * (1 + i % 2) })
.reduce(function (agg, v) { return agg + v; }, '').split('')
.reduce(function (agg, v) { return agg + +v; }, 0) % 10 === 0 ? '(valid)' : '(invalid)');
}
btw to markup simply append 2 spaces to the front of the newline
Re:Why do credit card forms ask for Visa, Mastercard, etc.?
by ycombobreaker on Saturday February 01, 2014 @04:34AM
(#7161266)
While your code may be fine, I find it weird to see functional operations in the same expression as the ASCII code '0' (48). It is a very weird juxtaposition of abstractions.
static bool IsValidLuhn(string numbers) { if (numbers == null) throw new ArgumentNullException("number", "number must have a value.");
var allNumbers = numbers .Where((c) => c >= '0' && c <= '9') .Reverse() .Select((c, i) => (i % 2 == 1) ? ((Convert.ToInt32(c) - 48) * 2).ToString() : c.ToString());
return allNumbers.Count() > 0 ? allNumbers.Aggregate((x, y) => x + y).Sum((c) => Convert.ToInt32(c) - 48) % 10 == 0 : false; }
Edit: Can sum one link me to HackerNews markdown?