Zend_Validate-CreditCard.xml 12 KB

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