2004年8月 4日

Java | Struts CreditCard Validator

眠れなかったので、Struts用のCreditCardValidatorクラスを作ってみた。

Strutsの標準Validatorでもクレジットカード番号はチェックできるけど、日本で普及しているJCB、そしてお金持ちが使うDinersはサポートされていない。まずは、この二つのカード会社もサポートしたvalidateCreditCard()メソッドを作成。

このvalidateCreditCard()メソッドでは、カード番号しかチェックしない。例えば、ECサイトの決済フォームで、カード会社にVISAを指定して、JCBカードの番号を入力しても、その番号がJCBのものとして正しいければ(チェックデジットが正しければ)、Validatorをすり抜けてしまう。

まあ実際は、クレジットカードの与信にはカード番号と有効期限だけが必要だから、カード会社の指定なんて必要ないのだけど。それにこのValidatorでチェックできることは文法的に正しいカード番号かどうかだけで、本当に有効なカード番号かどうかはチェックできないしね。

そうは言っても、カード決済網にアクセスする前の段階で一度、カード会社名も含め入力されたカード情報の妥当性はチェックしておきたい。そこで作ってみたのが、validateCreditCardNumberWithType()メソッド。Javadocコメントは以下。

指定されたカード会社に対応する正しいクレジットカード番号かどうかをチェックします。

type変数にカード会社が指定されるプロパティ名をセットします。
例えば、カード会社名入力フィールドのプロパティ名が「cardType」で、カード番号入力フィールドのプロパティ名が「cardNumber」の場合、
validationルールは次のようになります。

<field property="cardNumber" depends="required,strictCreditCard">
<arg0 key="typeForm.cardNumber.displayname"/>
<var>
<var-name>type</var-name>
<var-value>cardType</var-value>
</var>
</field>
typeで指定されたプロパティからカード会社名が取得できない場合、validationは失敗します。


対応しているカード会社と、typeで指定されたプロパティで使用できる値は次の通りです。

カード会社認識できる値 (大文字・小文字は問いません)
VISAvisa
Master Cardmaster または mastercard
JCBjcb
アメリカンエクスプレスamex
ダイナースクラブdiners または dinersclub


あとは有効期限のチェックメソッドを作らないと。これは月と年で二つにフィールドが分かれるとちょっと面倒だけど、ルールそのものは今日の年月より後かどうかだけなのでシンプル。

Posted by otsuka : 05:11 | Comment (0) | Trackback (0)
Comment









名前、アドレスを登録しますか?