Zend_Validate-CreditCard.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20799 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.set.creditcard">
  5. <title>CreditCard</title>
  6. <para>
  7. <classname>Zend_Validate_CreditCard</classname> erlaubt es zu prüfen ob ein angegebener
  8. Wert eine Kreditkarten Nummer sein könnte.
  9. </para>
  10. <para>
  11. Eine Kreditkarte enthält verschiedene Elemente an Metadaten, inklusive ein Hologramm, die
  12. Accountnummer, Logo, Ablaufdatum, Sicherheitscode und den Namen des Kreditkartenbesitzers.
  13. Die Algorithmen für die Prüfung der Kombination an Metadaten sind nur der ausgebenden
  14. Firma bekannt, und sollten mit Ihnen zum Zwecke der Zahlung geprüft werden. Trotzdem ist es
  15. oft nützlich zu wissen ob eine akutell angegebene Nummer in den Bereich der möglichen
  16. Nummern fällt <emphasis>bevor</emphasis> so eine Überprüfung durchgeführt wird, und daher
  17. prüft <classname>Zend_Validate_CreditCard</classname> einfach ob die angegebene
  18. Kreditkartennummer entspricht.
  19. </para>
  20. <para>
  21. Für die Fälle in denen man ein Service hat, das tiefere Prüfungen durchführt, bietet
  22. <classname>Zend_Validate_CreditCard</classname> auch die Möglichkeit einen Service
  23. Callback anzuhängen der ausgeführt wird sobald die Kreditkartennummer vorbehaltlich als
  24. gültig geprüft wurde; dieser Callback wird dann ausgeführt, und sein Rückgabewert wird
  25. die komplette Gültigkeit erkennen.
  26. </para>
  27. <para>
  28. Die folgenden Kreditkarteninstitute werden akzeptiert:
  29. </para>
  30. <itemizedlist>
  31. <listitem>
  32. <para><emphasis>American Express</emphasis></para>
  33. <para><emphasis>China UnionPay</emphasis></para>
  34. <para><emphasis>Diners Club Card Blanche</emphasis></para>
  35. <para><emphasis>Diners Club International</emphasis></para>
  36. <para><emphasis>Diners Club US &amp; Canada</emphasis></para>
  37. <para><emphasis>Discover Card</emphasis></para>
  38. <para><emphasis>JCB</emphasis></para>
  39. <para><emphasis>Laser</emphasis></para>
  40. <para><emphasis>Maestro</emphasis></para>
  41. <para><emphasis>MasterCard</emphasis></para>
  42. <para><emphasis>Solo</emphasis></para>
  43. <para><emphasis>Visa</emphasis></para>
  44. <para><emphasis>Visa Electron</emphasis></para>
  45. </listitem>
  46. </itemizedlist>
  47. <note>
  48. <title>Ungültige Institute</title>
  49. <para>
  50. Die Institute <emphasis>Bankcard</emphasis> und <emphasis>Diners Club
  51. enRoute</emphasis> existieren nicht mehr. Deshalb werden Sie als ungültig erkannt.
  52. </para>
  53. <para>
  54. <emphasis>Switch</emphasis> wurde zu <emphasis>Visa</emphasis> umbenannt und wird daher
  55. auch als ungültig erkannt.
  56. </para>
  57. </note>
  58. <sect3 id="zend.validate.set.creditcard.basic">
  59. <title>Grundsätzliche Verwendung</title>
  60. <para>
  61. Es gibt verschiedene Kreditkarten Institute wie mit
  62. <classname>Zend_Validate_CreditCard</classname> geprüft werden können. Standardmäßig
  63. werden alle bekannte Institute akzeptiert. Siehe das folgende Beispiel:
  64. </para>
  65. <programlisting language="php"><![CDATA[
  66. $valid = new Zend_Validate_CreditCard();
  67. if ($valid->isValid($input)) {
  68. // Die Eingabe scheint gültig zu sein
  69. } else {
  70. // Die Eingabe ist ungültig
  71. }
  72. ]]></programlisting>
  73. <para>
  74. Das oben stehende Beispiel würde alle bekannten Kreditkarten Institute als gültig
  75. erkennen.
  76. </para>
  77. </sect3>
  78. <sect3 id="zend.validate.set.creditcard.institute">
  79. <title>Definierte Kreditkarte akzeptieren</title>
  80. <para>
  81. Manchmal ist es notwendig nur definierte Kreditkarten Institute zu akzeptieren statt
  82. alle; z.B wenn man einen Webshop hat der nur Visa und American Express Karten
  83. akzeptiert. <classname>Zend_Validate_CreditCard</classname> erlaubt einem exakt das zu
  84. tun, indem auf genau diese Institute limitiert wird.
  85. </para>
  86. <para>
  87. Um ein Limit zu verwenden kann man entweder spezifische Institute bei der Initiierung
  88. angeben, oder im nachhinein durch Verwendung von <methodname>setType()</methodname>.
  89. Jede kann verschiedene Argumente verwenden.
  90. </para>
  91. <para>
  92. Man kann ein einzelnes Institut angeben:
  93. </para>
  94. <programlisting language="php"><![CDATA[
  95. $valid = new Zend_Validate_CreditCard(
  96. Zend_Validate_CreditCard::AMERICAN_EXPRESS
  97. );
  98. ]]></programlisting>
  99. <para>
  100. Wenn man mehrere Institute erlauben will, dann kann man diese als Array angeben:
  101. </para>
  102. <programlisting language="php"><![CDATA[
  103. $valid = new Zend_Validate_CreditCard(array(
  104. Zend_Validate_CreditCard::AMERICAN_EXPRESS,
  105. Zend_Validate_CreditCard::VISA
  106. ));
  107. ]]></programlisting>
  108. <para>
  109. Wie bei allen Prüfern kann man auch ein assoziatives Array an Optionen oder eine
  110. Instanz von <classname>Zend_Config</classname> angeben. In diesem Fall muß man die
  111. Institute mit dem Arrayschlüssel <property>type</property> angeben wie hier simuliert:
  112. </para>
  113. <programlisting language="php"><![CDATA[
  114. $valid = new Zend_Validate_CreditCard(array(
  115. 'type' => array(Zend_Validate_CreditCard::AMERICAN_EXPRESS)
  116. ));
  117. ]]></programlisting>
  118. <table id="zend.validate.set.creditcard.institute.table">
  119. <title>Konstanten für Kreditkarten Institute</title>
  120. <tgroup cols="5">
  121. <thead>
  122. <row>
  123. <entry>Institut</entry>
  124. <entry>Konstante</entry>
  125. </row>
  126. </thead>
  127. <tbody>
  128. <row>
  129. <entry><emphasis>American Express</emphasis></entry>
  130. <entry><constant>AMERICAN_EXPRESS</constant></entry>
  131. </row>
  132. <row>
  133. <entry><emphasis>China UnionPay</emphasis></entry>
  134. <entry><constant>UNIONPAY</constant></entry>
  135. </row>
  136. <row>
  137. <entry><emphasis>Diners Club Card Blanche</emphasis></entry>
  138. <entry><constant>DINERS_CLUB</constant></entry>
  139. </row>
  140. <row>
  141. <entry><emphasis>Diners Club International</emphasis></entry>
  142. <entry><constant>DINERS_CLUB</constant></entry>
  143. </row>
  144. <row>
  145. <entry><emphasis>Diners Club US &amp; Canada</emphasis></entry>
  146. <entry><constant>DINERS_CLUB_US</constant></entry>
  147. </row>
  148. <row>
  149. <entry><emphasis>Discover Card</emphasis></entry>
  150. <entry><constant>DISCOVER</constant></entry>
  151. </row>
  152. <row>
  153. <entry><emphasis>JCB</emphasis></entry>
  154. <entry><constant>JCB</constant></entry>
  155. </row>
  156. <row>
  157. <entry><emphasis>Laser</emphasis></entry>
  158. <entry><constant>LASER</constant></entry>
  159. </row>
  160. <row>
  161. <entry><emphasis>Maestro</emphasis></entry>
  162. <entry><constant>MAESTRO</constant></entry>
  163. </row>
  164. <row>
  165. <entry><emphasis>MasterCard</emphasis></entry>
  166. <entry><constant>MASTERCARD</constant></entry>
  167. </row>
  168. <row>
  169. <entry><emphasis>Solo</emphasis></entry>
  170. <entry><constant>SOLO</constant></entry>
  171. </row>
  172. <row>
  173. <entry><emphasis>Visa</emphasis></entry>
  174. <entry><constant>VISA</constant></entry>
  175. </row>
  176. <row>
  177. <entry><emphasis>Visa Electron</emphasis></entry>
  178. <entry><constant>VISA</constant></entry>
  179. </row>
  180. </tbody>
  181. </tgroup>
  182. </table>
  183. <para>
  184. Man kann Institute auch im Nachhinein setzen oder hinzufügen indem die Methoden
  185. <methodname>setType()</methodname>, <methodname>addType()</methodname> und
  186. <methodname>getType()</methodname> verwendet werden.
  187. </para>
  188. <programlisting language="php"><![CDATA[
  189. $valid = new Zend_Validate_CreditCard();
  190. $valid->setType(array(
  191. Zend_Validate_CreditCard::AMERICAN_EXPRESS,
  192. Zend_Validate_CreditCard::VISA
  193. ));
  194. ]]></programlisting>
  195. <note>
  196. <title>Standard Institute</title>
  197. <para>
  198. Wenn bei der Initiierung kein Institut angegeben wird, dann wird
  199. <constant>ALL</constant> verwendet, welches alle Institute auf einmal verwendet.
  200. </para>
  201. <para>
  202. In diesem Fall ist die Verwendung von <methodname>addType()</methodname> sinnlos
  203. weil bereits alle Institute hinzugefügt wurden.
  204. </para>
  205. </note>
  206. </sect3>
  207. <sect3 id="zend.validate.set.creditcard.servicecheck">
  208. <title>Prüfung durch Verwendung einer fremden API</title>
  209. <para>
  210. Wie vorher erwähnt prüft <classname>Zend_Validate_CreditCard</classname> nur die
  211. Kreditkarten Nummer. Glücklicherweise bieten einige Institute online
  212. <acronym>API</acronym>s welche eine Kreditkarten Nummer durch Verwendung von Algorithmen
  213. prüfen kann, welche nicht öffentlich bekannt sind. Die meisten dieser Services sind zu
  214. bezahlen. Deshalb ist diese Art der Prüfung standardmäßig deaktiviert.
  215. </para>
  216. <para>
  217. Wenn man auf so eine <acronym>API</acronym> zugreift, kann man diese als Addon für
  218. <classname>Zend_Validate_CreditCard</classname> verwenden um die Sicherheit der
  219. Prüfung zu erhöhen.
  220. </para>
  221. <para>
  222. Um das zu tun muss man einfach einen Callback angeben der aufgerufen wird wenn die
  223. generische Prüfung erfolgreich war. Das verhindert das die <acronym>API</acronym> für
  224. ungültige Nummern aufgerufen wird, was wiederum die Performance der Anwendung erhöht.
  225. </para>
  226. <para>
  227. <methodname>setService()</methodname> setzt ein neues Service und
  228. <methodname>getService()</methodname> gibt das gesetzte Service zurück. Als
  229. Option für die Konfiguration kann man den Arrayschlüssel '<property>service</property>'
  230. bei der Initiierung verwenden. Für Details über mögliche Optionen kann man unter
  231. <link linkend="zend.validate.set.callback">Callback</link> nachsehen.
  232. </para>
  233. <programlisting language="php"><![CDATA[
  234. // Die eigene Service Klasse
  235. class CcService
  236. {
  237. public function checkOnline($cardnumber, $types)
  238. {
  239. // einige online Prüfungen
  240. }
  241. }
  242. // Die Prüfung
  243. $service = new CcService();
  244. $valid = new Zend_Validate_CreditCard(Zend_Validate_CreditCard::VISA);
  245. $valid->setService(array($service, 'checkOnline'));
  246. ]]></programlisting>
  247. <para>
  248. Wie man sieht wird die Callback Methode mit der Kreditkarten Nummer als erster Parameter
  249. aufgerufen, und die akzeptierten Typen als zweiter Parameter.
  250. </para>
  251. </sect3>
  252. </sect2>