Zend_Validate-CreditCard.xml 12 KB

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