elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Validar tarjetas de crédito
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Validar tarjetas de crédito  (Leído 10,503 veces)
Stoya

Desconectado Desconectado

Mensajes: 112


Esperando respuestas


Ver Perfil
Validar tarjetas de crédito
« en: 26 Febrero 2011, 02:22 am »

Hola, quería saber cómo puedo hacer un sistema para validar las tarjetas de crédito. El carro de la compra y todo lo demás ya lo tengo diseñado, pero para esto último no sé si puedo hacerlo simplemente con criptografía y haciendo cuentas o si tengo que conectarme al banco para comprobar que no me están dando gato por liebre.

Y si tengo que conectarme, ¿cómo me conecto?


En línea

madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Validar tarjetas de crédito
« Respuesta #1 en: 26 Febrero 2011, 19:06 pm »

Con javascript o PHP puedes hacerte una función que compruebe si la tarjeta de crédito es valida.
Al final de la respuesta te dejo un ejemplo en JS de como se haría la comprobación.

Citar
o si tengo que conectarme al banco para comprobar que no me están dando gato por liebre.
Es fácil, si el banco devuelve el pago, no se realiza el envió (por ejemplo, si se trata de una tienda).

Puedes leer mas sobre como funciona este sistema: Sistema de Pagos Electrónico.

Otra forma "es conectarte a los bancos" como tu dices, hay muchos que disponen de WebServices, por ejemplo Paypal (aunque no se trata de un banco):
_Using PayPal’s Instant Payment Notification with PHP
_PayPal Web Services


Ejemplo de comprobación de tarjetas con javascript:

Código
  1. <!-- TWO STEPS TO INSTALL CREDIT CARD VALIDATION:
  2.  
  3. 1. Copy the coding into the HEAD of your HTML document
  4. 2. Add the last code into the BODY of your HTML document -->
  5.  
  6. <!-- STEP ONE: Paste this code into the HEAD of your HTML document -->
  7.  
  8. <HEAD>
  9.  
  10. <SCRIPT LANGUAGE="javascript">
  11. <!-- Original: Simon Tneoh (tneohcb@pc.jaring.my) -->
  12.  
  13. <!-- This script and many more are available free online at -->
  14. <!-- The javascript Source!! http://javascript.internet.com -->
  15.  
  16. <!-- Begin
  17. var Cards = new makeArray(8);
  18. Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
  19. var MasterCard = Cards[0];
  20. Cards[1] = new CardType("VisaCard", "4", "13,16");
  21. var VisaCard = Cards[1];
  22. Cards[2] = new CardType("AmExCard", "34,37", "15");
  23. var AmExCard = Cards[2];
  24. Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
  25. var DinersClubCard = Cards[3];
  26. Cards[4] = new CardType("DiscoverCard", "6011", "16");
  27. var DiscoverCard = Cards[4];
  28. Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
  29. var enRouteCard = Cards[5];
  30. Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
  31. var JCBCard = Cards[6];
  32. var LuhnCheckSum = Cards[7] = new CardType();
  33.  
  34. /*************************************************************************\
  35. CheckCardNumber(form)
  36. function called when users click the "check" button.
  37. \*************************************************************************/
  38. function CheckCardNumber(form) {
  39. var tmpyear;
  40. if (form.CardNumber.value.length == 0) {
  41. alert("Please enter a Card Number.");
  42. form.CardNumber.focus();
  43. return;
  44. }
  45. if (form.ExpYear.value.length == 0) {
  46. alert("Please enter the Expiration Year.");
  47. form.ExpYear.focus();
  48. return;
  49. }
  50. if (form.ExpYear.value > 96)
  51. tmpyear = "19" + form.ExpYear.value;
  52. else if (form.ExpYear.value < 21)
  53. tmpyear = "20" + form.ExpYear.value;
  54. else {
  55. alert("The Expiration Year is not valid.");
  56. return;
  57. }
  58. tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].value;
  59. // The following line doesn't work in IE3, you need to change it
  60. // to something like "(new CardType())...".
  61. // if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
  62. if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
  63. alert("This card has already expired.");
  64. return;
  65. }
  66. card = form.CardType.options[form.CardType.selectedIndex].value;
  67. var retval = eval(card + ".checkCardNumber(\"" + form.CardNumber.value +
  68. "\", " + tmpyear + ", " + tmpmonth + ");");
  69. cardname = "";
  70. if (retval)
  71.  
  72.  
  73.  
  74. // comment this out if used on an order form
  75. alert("This card number appears to be valid.");
  76.  
  77.  
  78. else {
  79. // The cardnumber has the valid luhn checksum, but we want to know which
  80. // cardtype it belongs to.
  81. for (var n = 0; n < Cards.size; n++) {
  82. if (Cards[n].checkCardNumber(form.CardNumber.value, tmpyear, tmpmonth)) {
  83. cardname = Cards[n].getCardType();
  84. break;
  85. }
  86. }
  87. if (cardname.length > 0) {
  88. alert("This looks like a " + cardname + " number, not a " + card + " number.");
  89. }
  90. else {
  91. alert("This card number is not valid.");
  92. }
  93. }
  94. }
  95. /*************************************************************************\
  96. Object CardType([String cardtype, String rules, String len, int year,
  97.  int month])
  98. cardtype : type of card, eg: MasterCard, Visa, etc.
  99. rules : rules of the cardnumber, eg: "4", "6011", "34,37".
  100. len : valid length of cardnumber, eg: "16,19", "13,16".
  101. year : year of expiry date.
  102. month : month of expiry date.
  103. eg:
  104. var VisaCard = new CardType("Visa", "4", "16");
  105. var AmExCard = new CardType("AmEx", "34,37", "15");
  106. \*************************************************************************/
  107. function CardType() {
  108. var n;
  109. var argv = CardType.arguments;
  110. var argc = CardType.arguments.length;
  111.  
  112. this.objname = "object CardType";
  113.  
  114. var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
  115. var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
  116. var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";
  117.  
  118. this.setCardNumber = setCardNumber; // set CardNumber method.
  119. this.setCardType = setCardType; // setCardType method.
  120. this.setLen = setLen; // setLen method.
  121. this.setRules = setRules; // setRules method.
  122. this.setExpiryDate = setExpiryDate; // setExpiryDate method.
  123.  
  124. this.setCardType(tmpcardtype);
  125. this.setLen(tmplen);
  126. this.setRules(tmprules);
  127. if (argc > 4)
  128. this.setExpiryDate(argv[3], argv[4]);
  129.  
  130. this.checkCardNumber = checkCardNumber; // checkCardNumber method.
  131. this.getExpiryDate = getExpiryDate; // getExpiryDate method.
  132. this.getCardType = getCardType; // getCardType method.
  133. this.isCardNumber = isCardNumber; // isCardNumber method.
  134. this.isExpiryDate = isExpiryDate; // isExpiryDate method.
  135. this.luhnCheck = luhnCheck;// luhnCheck method.
  136. return this;
  137. }
  138.  
  139. /*************************************************************************\
  140. boolean checkCardNumber([String cardnumber, int year, int month])
  141. return true if cardnumber pass the luhncheck and the expiry date is
  142. valid, else return false.
  143. \*************************************************************************/
  144. function checkCardNumber() {
  145. var argv = checkCardNumber.arguments;
  146. var argc = checkCardNumber.arguments.length;
  147. var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
  148. var year = (argc > 1) ? argv[1] : this.year;
  149. var month = (argc > 2) ? argv[2] : this.month;
  150.  
  151. this.setCardNumber(cardnumber);
  152. this.setExpiryDate(year, month);
  153.  
  154. if (!this.isCardNumber())
  155. return false;
  156. if (!this.isExpiryDate())
  157. return false;
  158.  
  159. return true;
  160. }
  161. /*************************************************************************\
  162. String getCardType()
  163. return the cardtype.
  164. \*************************************************************************/
  165. function getCardType() {
  166. return this.cardtype;
  167. }
  168. /*************************************************************************\
  169. String getExpiryDate()
  170. return the expiry date.
  171. \*************************************************************************/
  172. function getExpiryDate() {
  173. return this.month + "/" + this.year;
  174. }
  175. /*************************************************************************\
  176. boolean isCardNumber([String cardnumber])
  177. return true if cardnumber pass the luhncheck and the rules, else return
  178. false.
  179. \*************************************************************************/
  180. function isCardNumber() {
  181. var argv = isCardNumber.arguments;
  182. var argc = isCardNumber.arguments.length;
  183. var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
  184. if (!this.luhnCheck())
  185. return false;
  186.  
  187. for (var n = 0; n < this.len.size; n++)
  188. if (cardnumber.toString().length == this.len[n]) {
  189. for (var m = 0; m < this.rules.size; m++) {
  190. var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
  191. if (headdigit == this.rules[m])
  192. return true;
  193. }
  194. return false;
  195. }
  196. return false;
  197. }
  198.  
  199. /*************************************************************************\
  200. boolean isExpiryDate([int year, int month])
  201. return true if the date is a valid expiry date,
  202. else return false.
  203. \*************************************************************************/
  204. function isExpiryDate() {
  205. var argv = isExpiryDate.arguments;
  206. var argc = isExpiryDate.arguments.length;
  207.  
  208. year = argc > 0 ? argv[0] : this.year;
  209. month = argc > 1 ? argv[1] : this.month;
  210.  
  211. if (!isNum(year+""))
  212. return false;
  213. if (!isNum(month+""))
  214. return false;
  215. today = new Date();
  216. expiry = new Date(year, month);
  217. if (today.getTime() > expiry.getTime())
  218. return false;
  219. else
  220. return true;
  221. }
  222.  
  223. /*************************************************************************\
  224. boolean isNum(String argvalue)
  225. return true if argvalue contains only numeric characters,
  226. else return false.
  227. \*************************************************************************/
  228. function isNum(argvalue) {
  229. argvalue = argvalue.toString();
  230.  
  231. if (argvalue.length == 0)
  232. return false;
  233.  
  234. for (var n = 0; n < argvalue.length; n++)
  235. if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
  236. return false;
  237.  
  238. return true;
  239. }
  240.  
  241. /*************************************************************************\
  242. boolean luhnCheck([String CardNumber])
  243. return true if CardNumber pass the luhn check else return false.
  244. Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
  245. \*************************************************************************/
  246. function luhnCheck() {
  247. var argv = luhnCheck.arguments;
  248. var argc = luhnCheck.arguments.length;
  249.  
  250. var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
  251.  
  252. if (! isNum(CardNumber)) {
  253. return false;
  254. }
  255.  
  256. var no_digit = CardNumber.length;
  257. var oddoeven = no_digit & 1;
  258. var sum = 0;
  259.  
  260. for (var count = 0; count < no_digit; count++) {
  261. var digit = parseInt(CardNumber.charAt(count));
  262. if (!((count & 1) ^ oddoeven)) {
  263. digit *= 2;
  264. if (digit > 9)
  265. digit -= 9;
  266. }
  267. sum += digit;
  268. }
  269. if (sum % 10 == 0)
  270. return true;
  271. else
  272. return false;
  273. }
  274.  
  275. /*************************************************************************\
  276. ArrayObject makeArray(int size)
  277. return the array object in the size specified.
  278. \*************************************************************************/
  279. function makeArray(size) {
  280. this.size = size;
  281. return this;
  282. }
  283.  
  284. /*************************************************************************\
  285. CardType setCardNumber(cardnumber)
  286. return the CardType object.
  287. \*************************************************************************/
  288. function setCardNumber(cardnumber) {
  289. this.cardnumber = cardnumber;
  290. return this;
  291. }
  292.  
  293. /*************************************************************************\
  294. CardType setCardType(cardtype)
  295. return the CardType object.
  296. \*************************************************************************/
  297. function setCardType(cardtype) {
  298. this.cardtype = cardtype;
  299. return this;
  300. }
  301.  
  302. /*************************************************************************\
  303. CardType setExpiryDate(year, month)
  304. return the CardType object.
  305. \*************************************************************************/
  306. function setExpiryDate(year, month) {
  307. this.year = year;
  308. this.month = month;
  309. return this;
  310. }
  311.  
  312. /*************************************************************************\
  313. CardType setLen(len)
  314. return the CardType object.
  315. \*************************************************************************/
  316. function setLen(len) {
  317. // Create the len array.
  318. if (len.length == 0 || len == null)
  319. len = "13,14,15,16,19";
  320.  
  321. var tmplen = len;
  322. n = 1;
  323. while (tmplen.indexOf(",") != -1) {
  324. tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
  325. n++;
  326. }
  327. this.len = new makeArray(n);
  328. n = 0;
  329. while (len.indexOf(",") != -1) {
  330. var tmpstr = len.substring(0, len.indexOf(","));
  331. this.len[n] = tmpstr;
  332. len = len.substring(len.indexOf(",") + 1, len.length);
  333. n++;
  334. }
  335. this.len[n] = len;
  336. return this;
  337. }
  338.  
  339. /*************************************************************************\
  340. CardType setRules()
  341. return the CardType object.
  342. \*************************************************************************/
  343. function setRules(rules) {
  344. // Create the rules array.
  345. if (rules.length == 0 || rules == null)
  346. rules = "0,1,2,3,4,5,6,7,8,9";
  347.  
  348. var tmprules = rules;
  349. n = 1;
  350. while (tmprules.indexOf(",") != -1) {
  351. tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
  352. n++;
  353. }
  354. this.rules = new makeArray(n);
  355. n = 0;
  356. while (rules.indexOf(",") != -1) {
  357. var tmpstr = rules.substring(0, rules.indexOf(","));
  358. this.rules[n] = tmpstr;
  359. rules = rules.substring(rules.indexOf(",") + 1, rules.length);
  360. n++;
  361. }
  362. this.rules[n] = rules;
  363. return this;
  364. }
  365. // End -->
  366. </script>
  367. </HEAD>
  368.  
  369. <!-- STEP TWO: Copy this code into the BODY of your HTML document -->
  370.  
  371. <BODY>
  372.  
  373. <center>
  374. <form name="ThisForm">
  375. Card Number: <input name="CardNumber" size="16" maxlength="19"><br>
  376. Card Type:
  377. <select name="CardType">
  378. <option value="MasterCard">MasterCard
  379. <option value="VisaCard">Visa
  380. <option value="AmExCard">American Express
  381. <option value="DinersClubCard">Diners Club
  382. <option value="DiscoverCard">Discover
  383. <option value="enRouteCard">enRoute
  384. <option value="JCBCard">JCB
  385. </select>
  386. <br>
  387. Expiration Date: Month
  388. <select name="ExpMon">
  389. <option value="1" selected>1
  390. <option value="2">2
  391. <option value="3">3
  392. <option value="4">4
  393. <option value="5">5
  394. <option value="6">6
  395. <option value="7">7
  396. <option value="8">8
  397. <option value="9">9
  398. <option value="10">10
  399. <option value="11">11
  400. <option value="12">12
  401. </select>
  402. Year <input name="ExpYear" size="2" maxlength="2">(Range: 1997~2020)<br>
  403. <input type="button" value="Check" OnClick="CheckCardNumber(this.form)"><br>
  404. </form>
  405. </center>
  406.  
  407. <p><center>
  408. <font face="arial, helvetica" size="-2">Free JavaScripts provided<br>
  409. by <a href="http://javascriptsource.com">The javascript Source</a></font>
  410. </center><p>
  411.  
  412. <!-- Script Size: 12.38 KB -->


En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Validar tarjetas de crédito
« Respuesta #2 en: 26 Febrero 2011, 20:16 pm »

Ese algoritmo es fácilmente falseable, vamos que puedes colar tarjetas falsas o ajenas sin problemas. Si quieres permitir compras en tu sitio debes ponerte en contacto con tu entidad bancaria para que te proporcione el TPV, normalmente te piden bastante información, debes estar dado de alta como autónomo o como empresa y debes proporcionar tu CIF y todo eso, una vez lo comprueben te darán tus datos y podrás implementar el TPV de tu banco en tu web, de esta forma se creará una pasarela de pago segura para gestionar los pagos, comprobarán que la tarjeta es correcta y cobrarán lo que sea. Además te cobrarán entre un 3 y un 5% del valor de cada transferencia como comisión.

La verdad es que si quieres aceptar pagos con tarjeta en tu sitio, yo te recomiendo Paypal, es mucho más rápido de implementar, más fácil, con menos comisión y menos quebraderos de cabeza.
En línea

Stoya

Desconectado Desconectado

Mensajes: 112


Esperando respuestas


Ver Perfil
Re: Validar tarjetas de crédito
« Respuesta #3 en: 26 Febrero 2011, 21:14 pm »

Spider-Net, veré lo que puedo hacer porque no es decisión mía, yo sólo monto la web.

Gracias a los dos.
En línea

lokitorz

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Validar tarjetas de crédito
« Respuesta #4 en: 1 Marzo 2011, 22:42 pm »

para montar sistemas con tarjeta de credito deberias hacer una zona segura https y para eso te tienen que conceder licencia la pagina de certificados webs
En línea

Spider-Net


Desconectado Desconectado

Mensajes: 1.165


Un gran poder conlleva una gran responsabilidad


Ver Perfil WWW
Re: Validar tarjetas de crédito
« Respuesta #5 en: 2 Marzo 2011, 03:51 am »

No es necesario tener certificados, la entidad bancaria que te proporciona el TPV es la que tiene el certificado, tú sólo tienes que solicitarlo y proporcionar los datos correspondientes, y ellos te conceden la pasarela de pago vía https.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Skimming: Clonación de Tarjetas de Credito
Seguridad
p1r4t0s 6 22,237 Último mensaje 17 Junio 2013, 02:53 am
por LunnN
Informe del hackeo a Straffor: 44.000 contraseñas, 9.000 tarjetas de crédito
Noticias
wolfbcn 3 2,609 Último mensaje 28 Diciembre 2011, 17:24 pm
por m0rf
Monedas y tarjetas de crédito solidarias con el software libre
Noticias
wolfbcn 0 2,542 Último mensaje 12 Febrero 2012, 03:03 am
por wolfbcn
El hacker ‘Fortezza’ roba 44.000 tarjetas de crédito
Noticias
wolfbcn 0 1,972 Último mensaje 12 Junio 2012, 21:21 pm
por wolfbcn
[Ayuda]Validar tarjeta de credito
Programación C/C++
Xiray 2 4,035 Último mensaje 23 Julio 2016, 07:51 am
por Xiray
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines