# File formvalidator.rb, line 811
    def match_cc_number(card, card_type)
      orig_card  = card
      card_type  = card_type.to_s
      index      = nil
      digit      = nil
      multiplier = 2
      sum        = 0
      return nil if card.length == 0
      return nil unless card_type =~ /^[admv]/i
      # Check the card type.
      return nil if ((card_type =~ /^v/i && card[0,1] != "4") ||
                     (card_type =~ /^m/i && card[0,1] != /^51|55$/) ||
                     (card_type =~ /^d/i && card[0,4] != "6011") ||
                     (card_type =~ /^a/i && card[0,2] !~ /^34|37$/))
      card.gsub!(" ", "")
      return nil if card !~ /^\d+$/
      digit = card[0,1]
      index = (card.length-1)
      # Check for the valid number of digits.
      return nil if ((digit == "3" && index != 14) ||
                     (digit == "4" && index != 12 && index != 15) ||
                     (digit == "5" && index != 15) ||
                     (digit == "6" && index != 13 && index != 15))
      (index-1).downto(0) do |i|
        digit = card[i, 1].to_i
        product = multiplier * digit
        sum += (product > 9) ? (product-9) : product
        multiplier = 3 - multiplier
      end
      sum %= 10
      sum = 10 - sum unless sum == 0
      if sum.to_s == card[-1,1]
        match = /^([\d\s]*)$/.match(orig_card)
        return match ? match[1] : nil
      end
    end