| 
> Felado :  [Hungary]
> Utobbi idoben sok webhelyen (foleg szexsite-okon :))) hasznalnak 
> hitelkartyaszamot annak ellenorzesere, hogy betoltotte-e a delikvens a 
> 18/21 eletevet. Ebbol engem az az algoritmus erdekelne, hogy egy 
> kartyaszamrol hogyan lehet eldonteni, hogy ervenyes kartyaszam. Masik 
> erdekes dolog, hogy hogyan lehet vagy lehet-e (csak ugy) ervenyes 
> kartyaszamot generalni.
Mivel az arhivumban nem lattam valaszt a kerdesre... TomCat/Abaddon
// FormChek.js - This is a set of JavaScript functions for validating
// input on an HTML form.  Functions are provided to validate:
//      - credit card numbers
// 18 Feb 97 created Eric Krock (c)1997 Netscape Communications Corp.
function checkCreditCard (radio, theField) {
  var cardType = getRadioButtonValue(radio)
  var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
  if (!isCardMatch(cardType, normalizedCCN))
    return warnInvalid(theField,iCreditCardPrefix+cardType+iCreditCardSuffix);
  else {
    theField.value = normalizedCCN
    return true
  }
} /* ===============================================================
    Credit card verification functions
    Originally included as Starter Application 1.0.0 in LivePayment.
    20 Feb 1997 modified by egk:
           changed isCC to isCreditCard
           added "AMERICANEXPRESS" as equivalent of "AMEX"
    FUNCTION:  isCreditCard(st)
    INPUT:     st - a string representing a credit card number
    RETURNS:  true, if the credit card number passes the Luhn Mod-10 test.
              false, otherwise ===================================== */
function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits
  if (st.length > 19)
    return (false);
  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
// Uncomment the following line to help create credit card numbers
// 1. Create a dummy number with a 0 as the last digit
// 2. Examine the sum written out
// 3. Replace the last digit with the difference between the sum and
//    the next multiple of 10.
//  document.writeln("<BR>Sum      = ",sum,"<BR>");
//  alert("Sum      = " + sum);
  if ((sum % 10) == 0)
    return (true);
  else
    return (false);
} /* ===============================================================
    FUNCTION:  isVisa()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid VISA number.
              false, otherwise
    Sample number: 4111 1111 1111 1111 (16 digits) ================= */
function isVisa(cc) {
  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}  /* ==============================================================
    FUNCTION:  isMasterCard()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid MasterCard.
              false, otherwise
    Sample number: 5500 0000 0000 0004 (16 digits) ================= */
function isMasterCard(cc) {
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 1) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;
} /* ===============================================================
    FUNCTION:  isAmericanExpress()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid American Express.
              false, otherwise
    Sample number: 340000000000009 (15 digits) ===================== */
function isAmericanExpress(cc) {
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) &&
      ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;
} /* ===============================================================
    FUNCTION:  isDinersClub()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid Diner's Club.
              false, otherwise
    Sample number: 30000000000004 (14 digits) ====================== */
function isDinersClub(cc) {
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 14) && (firstdig == 3) &&
      ((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
    return isCreditCard(cc);
  return false;
} /* ===============================================================
    FUNCTION:  isCarteBlanche()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid Carte Blanche.
              false, otherwise ===================================== */
function isCarteBlanche(cc) {
  return isDinersClub(cc);
} /* ===============================================================
    FUNCTION:  isDiscover()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid Discover card.
              false, otherwise
    Sample number: 6011000000000004 (16 digits) ==================== */
function isDiscover(cc) {
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;
} /* ===============================================================
    FUNCTION:  isEnRoute()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid enRoute card.
              false, otherwise
    Sample number: 201400000000009 (15 digits) ===================== */
function isEnRoute(cc) {
  first4digs = cc.substring(0,4);
  if ((cc.length == 15) &&
      ((first4digs == "2014") ||
       (first4digs == "2149")))
    return isCreditCard(cc);
  return false;
} /* ===============================================================
    FUNCTION:  isJCB()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is a valid JCB card.
              false, otherwise ===================================== */
function isJCB(cc) {
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) &&
      ((first4digs == "3088") ||
       (first4digs == "3096") ||
       (first4digs == "3112") ||
       (first4digs == "3158") ||
       (first4digs == "3337") ||
       (first4digs == "3528")))
    return isCreditCard(cc);
  return false;
} /* ===============================================================
    FUNCTION:  isAnyCard()
    INPUT:     cc - a string representing a credit card number
    RETURNS:  true, if the credit card number is any valid credit
                    card number for any of the accepted card types.
              false, otherwise ===================================== */
function isAnyCard(cc) {
  if (!isCreditCard(cc))
    return false;
  if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) &&
      !isDinersClub(cc) && !isDiscover(cc) && !isEnRoute(cc) &&
      !isJCB(cc)) {
    return false;
  }
  return true;
} /* ===============================================================
    FUNCTION:  isCardMatch()
    INPUT:    cardType - a string representing the credit card type
              cardNumber - a string representing a credit card number
    RETURNS:  true, if the credit card number is valid for the particular
              credit card type given in "cardType".
              false, otherwise ===================================== */
function isCardMatch (cardType, cardNumber) {
        cardType = cardType.toUpperCase();
        var doesMatch = true;
        if ((cardType == "VISA") && (!isVisa(cardNumber)))
                doesMatch = false;
        if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber)))
                doesMatch = false;
        if ( ( (cardType == "AMERICANEXPRESS") || (cardType == "AMEX") )
                && (!isAmericanExpress(cardNumber))) doesMatch = false;
        if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
                doesMatch = false;
        if ((cardType == "JCB") && (!isJCB(cardNumber)))
                doesMatch = false;
        if ((cardType == "DINERS") && (!isDinersClub(cardNumber)))
                doesMatch = false;
        if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber)))
                doesMatch = false;
        if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber)))
                doesMatch = false;
        return doesMatch;
}  // END FUNCTION CardMatch() |