We have a fairly simple credit card form on a public website for users to add a new card, but in the process of adding support for American Express we found they require the collection of the "Name on [the] card" and validate this data.
┌─────────────────────────────────┐
│ │
│ Card number │
│ ┌───────────────────────────┐ │
│ │ │ │
│ └───────────────────────────┘ │
│ │
│ Expiry date │
│ ┌────────────────┐ ┌────────┐ │
│ │ 1 - January ▼ │ │ 2016 ▼ │ │
│ └────────────────┘ └────────┘ │
│ │
│ Security code │
│ ┌───────────────────────────┐ │
│ │ │ │
│ └───────────────────────────┘ │
│ │
└─────────────────────────────────┘
While adding this, we actually ran into a bit of a debate about what the most user friendly way to collect this information was.
Idea 1
The first group argued that the "Name on card" field should go before every other input in this set so that numerical inputs were all grouped together rather than having a numerical input, then an alphabetical input, then numerical inputs again.
Idea 2
The second group argued that "Name on card" belongs after the card number because that's the way it physically appears on many cards.
Idea 3
The final group argued that taking the second idea a step further, the "Name on card" field should be hidden until a card number matching American Express has been typed, then immediately appear bellow the card number field (by javascript) to help reduce the amount of input for cardholders who don't actually need to enter this extra information.
So I pose the question, where is the most user friendly place to ask for the "Name on card" in the ordered process of filling out such a form. What makes that way superior to other methods? Is it better to modify the form adding fields conditionally and minimize the amount of input required in the general case?