Cartage (30avril2008) - fusion edition

Contenu du snippet

Beaucoup en ont rêvé, peu s'y sont risqués, et maintenant c'est à votre portée !
Cartage est un générateur libre de numéros de cartes bancaires.
La version postée ne contient pas l'ensemble des données, mais reste fonctionnelle.
Les commentaires n'ont pas tous été corrigés, mais restent, pour la plupart, compréhensibles.

Si vous doutez que cette source puisse traiter de craking, hacking ou autres procédés illégaux, alors essayez de payer avec en ligne : vous serez déçus. Cela ne fonctionnera pas !!
Les numéros sont uniquement générés. Il n'y as pas de ré-génération ou d'extraction via des transactions financiaires existantes (tickets de caisse ou de guichets).

L'intérêt ?
Faire peur aux ignorants et rassurer les experts. (ou serait-ce l'inverse?)

Source / Exemple :


<HTML>
<HEAD>

<title>Générateur libre de numéros de cartes bancaires</title>

<script>
//_/!\_ La liste des cartes contient les elements suivant separes par des ¬
// 0    ¬ 1      ¬ 2      ¬ 3       ¬ 4                ¬ 5                                                                              ¬ 6                            ¬ 7                        ¬
// Type ¬ Banque ¬ Modele ¬ Prefixe ¬ Taille du numero ¬ Periode de validation en mois (entre la date d'emission et celle d'expiration) ¬ Taille du numéro de contrôle ¬ Nationalite du titulaire ¬
var lcartes = new Array("AMERICAN EXPRESS¬¬1¬372034¬16¬1¬4¬US¬",
"AMERICAN EXPRESS¬¬2¬372407¬16¬12¬4¬US¬",
"AMERICAN EXPRESS¬¬3¬372861¬16¬12¬4¬US¬",
"AMERICAN EXPRESS¬¬4¬373227¬16¬12¬4¬US¬",
"AMERICAN EXPRESS¬¬5¬37¬16¬12¬4¬US¬",
"AMERICAN EXPRESS¬¬6¬34¬16¬12¬4¬US¬",
"CARTE BLEUE¬¬¬¬16¬12¬3¬FR¬",
"CARTE FNAC¬¬¬5886¬16¬¬¬FR¬",
"CYRILLUS¬¬¬5886¬16¬¬¬FR¬",
"Diner's Club / Carte Blanche¬¬1¬300¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬2¬301¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬3¬302¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬4¬303¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬5¬304¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬6¬305¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬7¬36¬14¬¬3¬US¬",
"Diner's Club / Carte Blanche¬¬8¬38¬14¬¬3¬US¬",
"DISCOVER¬¬¬6011¬16¬¬3¬US¬",
"E-CARTE BLEUE¬¬¬¬16¬12¬3¬US¬",
"enRoute¬¬1¬2014¬15¬¬¬US¬",
"enRoute¬¬2¬2149¬15¬¬¬US¬",
"EUROCARD¬AB¬1¬5275¬16¬12¬3¬US¬",
"EUROCARD¬AB¬2¬53004¬16¬12¬3¬US¬",
"EUROCARD¬AB¬3¬541256¬16¬12¬3¬US¬",
"EUROCARD¬Belgique-Luxembourg¬1¬540054¬16¬12¬3¬BE¬",
"EUROCARD¬Belgique-Luxembourg¬2¬541327¬16¬12¬3¬BE¬",
"EUROCARD¬Belgique-Luxembourg¬3¬544327¬16¬12¬3¬BE¬",
"EUROCARD¬Danemark¬¬541303¬16¬12¬3¬DK¬",
"EUROCARD¬France¬1¬5294¬16¬12¬3¬FR¬",
"EUROCARD¬France¬2¬5295¬16¬12¬3¬FR¬",
"EUROCARD¬France¬3¬513¬16¬12¬3¬FR¬",
"EUROCARD¬International¬1¬541333¬16¬12¬3¬FR¬",
"EUROCARD¬International¬2¬544333¬16¬12¬3¬FR¬",
"EUROCARD¬International¬3¬545333¬16¬12¬3¬FR¬",
"EUROCARD¬International¬4¬546333¬16¬12¬3¬FR¬",
"EUROCARD¬Pays-Bas¬¬541330¬16¬12¬3¬FR¬",
"EUROCARD¬Suisse¬¬541325¬16¬12¬3¬FR¬",
"JCB¬¬1¬3¬16¬¬¬US¬",
"JCB¬¬2¬30¬16¬¬¬US¬",
"JCB¬¬3¬31¬16¬¬¬US¬",
"JCB¬¬4¬1800¬15¬¬¬US¬",
"JCB¬¬5¬2100¬15¬¬¬US¬",
"JCB¬¬6¬2131¬15¬¬¬US¬",
"KANGOUROU¬¬¬588639¬19¬¬¬FR¬",
"MASTERCARD¬Accord Finances¬¬5¬16¬12¬3¬US¬",
"MASTERCARD¬All Access¬¬5189¬16¬12¬3¬US¬",
"MASTERCARD¬Bank of America¬¬5490¬16¬12¬3¬US¬",
"MASTERCARD¬BarclayCard¬1¬5301¬16¬36¬3¬UK¬",
"MASTERCARD¬BarclayCard¬2¬5452¬16¬36¬3¬UK¬",
"MASTERCARD¬BarclayCard¬3¬49294¬16¬36¬3¬UK¬",
"MASTERCARD¬Barnes & Noble¬¬5156¬16¬12¬3¬UK¬",
"MASTERCARD¬Benefits Card¬¬5543¬16¬12¬3¬UK¬",
"MASTERCARD¬Capital One¬¬5460¬16¬36¬3¬UK¬",
"MASTERCARD¬Crédit Agricole¬Retrait¬5131¬16¬12¬3¬FR¬",
"MASTERCARD¬Finedis¬¬5¬16¬12¬3¬FR¬",
"MASTERCARD¬First Ontario Credit Union¬¬5491¬16¬12¬3¬US¬",
"MASTERCARD¬Non identifée¬1¬5206¬16¬12¬3¬US¬",
"MASTERCARD¬Non identifée¬2¬5419¬16¬24¬3¬US¬",
"MASTERCARD¬RBS¬¬5412¬16¬12¬3¬UK¬",
"MASTERCARD¬University of Westminster¬¬5522¬16¬24¬3¬UK¬",
"MASTERCARD¬Virgin Money¬¬5412¬16¬12¬3¬UK¬",
"MASTERCARD¬WSPA Mosaik¬¬5191¬16¬12¬3¬UK¬",
"MASTERCARD¬¬Général 1¬51¬16¬12¬3¬US¬",
"MASTERCARD¬¬Général 2¬52¬16¬12¬3¬US¬",
"MASTERCARD¬¬Général 3¬53¬16¬12¬3¬US¬",
"MASTERCARD¬¬Général 4 (Virgin Money)¬54¬16¬24¬3¬UK¬",
"MASTERCARD¬¬Général 5¬55¬16¬12¬3¬US¬",
"PRINTEMPS¬¬¬5016¬16¬¬¬FR¬",
"VISA¬Banque Populaire¬¬4¬16¬12¬3¬FR¬",
"VISA¬Banque Sofinco¬¬4976¬16¬12¬3¬FR¬",
"VISA¬BNP¬¬4974¬16¬24¬3¬FR¬",
"VISA¬Caisse d'Epargne¬Paiement¬4978¬16¬12¬3¬FR¬",
"VISA¬Caisse d'Epargne¬Retrait¬4927¬16¬12¬3¬FR¬",
"VISA¬Crédit Commercial¬¬4¬16¬12¬3¬FR¬",
"VISA¬Crédit Lyonnais¬¬4972¬16¬12¬3¬FR¬",
"VISA¬ICICI Bank¬¬4477¬16¬12¬3¬FR¬",
"VISA¬La Bred¬¬4975¬16¬12¬3¬FR¬",
"VISA¬La Poste¬¬4970¬16¬12¬3¬FR¬",
"VISA¬Société Générale¬¬4973¬16¬12¬3¬FR¬",
"VISA¬¬Général (13 chiffres)¬4¬13¬12¬3¬US¬",
"VISA¬¬Général (16 chiffres)¬4¬16¬12¬3¬US¬",
"Voyager¬¬¬8699¬15¬¬¬US¬");

//_/!\_ La liste des noms contient l'indicatif du pays (idem a celui de l'IBAN, sauf pour les Etats-Unis d'Amerique qui n'utilisent pas l'IBAN et sont indiques par "US").  Les noms sont classes du plus populaire au moins reference.
// Sources:
// - US: http://names.mongabay.com/most_common_surnames.htm

var lnoms = new Array("US_SMITH¬JOHNSON¬WILLIAMS¬JONES¬BROWN¬DAVIS¬MILLER¬WILSON¬MOORE¬TAYLOR¬ANDERSON¬THOMAS¬JACKSON¬WHITE¬HARRIS¬MARTIN¬THOMPSON¬GARCIA¬MARTINEZ¬ROBINSON¬CLARK¬RODRIGUEZ¬LEWIS¬LEE¬WALKER¬HALL¬ALLEN¬YOUNG¬HERNANDEZ¬KING¬WRIGHT¬LOPEZ¬HILL¬SCOTT¬GREEN¬ADAMS¬BAKER¬GONZALEZ¬NELSON¬CARTER¬MITCHELL¬PEREZ¬ROBERTS¬TURNER¬PHILLIPS¬CAMPBELL¬PARKER¬EVANS¬EDWARDS¬COLLINS¬STEWART¬SANCHEZ¬MORRIS¬ROGERS¬REED¬COOK¬MORGAN¬BELL¬MURPHY¬BAILEY¬RIVERA¬COOPER¬RICHARDSON¬COX¬HOWARD¬WARD¬TORRES¬PETERSON¬GRAY¬RAMIREZ¬JAMES¬WATSON¬BROOKS¬KELLY¬SANDERS¬PRICE¬BENNETT¬WOOD¬BARNES¬ROSS¬HENDERSON¬COLEMAN¬JENKINS¬PERRY¬POWELL¬LONG¬PATTERSON¬HUGHES¬FLORES¬WASHINGTON¬BUTLER¬SIMMONS¬FOSTER¬GONZALES¬BRYANT¬ALEXANDER¬RUSSELL¬GRIFFIN¬DIAZ¬HAYES¬MYERS¬FORD¬HAMILTON¬GRAHAM¬SULLIVAN¬WALLACE¬WOODS¬COLE¬WEST¬JORDAN¬OWENS¬REYNOLDS¬FISHER¬ELLIS¬HARRISON¬GIBSON¬MCDONALD¬CRUZ¬MARSHALL¬ORTIZ¬GOMEZ¬MURRAY¬FREEMAN¬WELLS¬WEBB¬SIMPSON¬STEVENS¬TUCKER¬PORTER¬HUNTER¬HICKS¬CRAWFORD¬HENRY¬BOYD¬MASON¬MORALES¬KENNEDY¬WARREN¬DIXON¬RAMOS¬REYES¬BURNS¬GORDON¬SHAW¬HOLMES¬RICE¬ROBERTSON¬HUNT¬BLACK¬DANIELS¬PALMER¬MILLS¬NICHOLS¬GRANT¬KNIGHT¬FERGUSON¬ROSE¬STONE¬HAWKINS¬DUNN¬PERKINS¬HUDSON¬SPENCER¬GARDNER¬STEPHENS¬PAYNE¬PIERCE¬BERRY¬MATTHEWS¬ARNOLD¬WAGNER¬WILLIS¬RAY¬WATKINS¬OLSON¬CARROLL¬DUNCAN¬SNYDER¬HART¬CUNNINGHAM¬BRADLEY¬LANE¬ANDREWS¬RUIZ¬HARPER¬FOX¬RILEY¬ARMSTRONG¬CARPENTER¬WEAVER¬GREENE¬LAWRENCE¬ELLIOTT¬CHAVEZ¬SIMS¬AUSTIN¬PETERS¬KELLEY¬FRANKLIN¬LAWSON¬FIELDS¬GUTIERREZ¬RYAN¬SCHMIDT¬CARR¬VASQUEZ¬CASTILLO¬WHEELER¬CHAPMAN¬OLIVER¬MONTGOMERY¬RICHARDS¬WILLIAMSON¬JOHNSTON¬BANKS¬MEYER¬BISHOP¬MCCOY¬HOWELL¬ALVAREZ¬MORRISON¬HANSEN¬FERNANDEZ¬GARZA¬HARVEY¬LITTLE¬BURTON¬STANLEY¬NGUYEN¬GEORGE¬JACOBS¬REID¬KIM¬FULLER¬LYNCH¬DEAN¬GILBERT¬GARRETT¬ROMERO¬WELCH¬LARSON¬FRAZIER¬BURKE¬HANSON¬DAY¬MENDOZA¬MORENO¬BOWMAN¬MEDINA¬FOWLER¬BREWER¬HOFFMAN¬CARLSON¬SILVA¬PEARSON¬HOLLAND¬DOUGLAS¬FLEMING¬JENSEN¬VARGAS¬BYRD¬DAVIDSON¬HOPKINS¬MAY¬TERRY¬HERRERA¬WADE¬SOTO¬WALTERS¬CURTIS¬NEAL¬CALDWELL¬LOWE¬JENNINGS¬BARNETT¬GRAVES¬JIMENEZ¬HORTON¬SHELTON¬BARRETT¬OBRIEN¬CASTRO¬SUTTON¬GREGORY¬MCKINNEY¬LUCAS¬MILES¬CRAIG¬RODRIQUEZ¬CHAMBERS¬HOLT¬LAMBERT¬FLETCHER¬WATTS¬BATES¬HALE¬RHODES¬PENA¬BECK¬NEWMAN¬HAYNES¬MCDANIEL¬MENDEZ¬BUSH¬VAUGHN¬PARKS¬DAWSON¬SANTIAGO¬NORRIS¬HARDY¬LOVE¬STEELE¬CURRY¬POWERS¬SCHULTZ¬BARKER¬GUZMAN¬PAGE¬MUNOZ¬BALL¬KELLER¬CHANDLER¬WEBER¬LEONARD¬WALSH¬LYONS¬RAMSEY¬WOLFE¬SCHNEIDER¬MULLINS¬BENSON¬SHARP¬BOWEN¬DANIEL¬BARBER¬CUMMINGS¬HINES¬BALDWIN¬GRIFFITH¬VALDEZ¬HUBBARD¬SALAZAR¬REEVES¬WARNER¬STEVENSON¬BURGESS¬SANTOS¬TATE¬CROSS¬GARNER¬MANN¬MACK¬MOSS¬THORNTON¬DENNIS¬MCGEE¬FARMER¬DELGADO¬AGUILAR¬VEGA¬GLOVER¬MANNING¬COHEN¬HARMON¬RODGERS¬ROBBINS¬NEWTON¬TODD¬BLAIR¬HIGGINS¬INGRAM¬REESE¬CANNON¬STRICKLAND¬TOWNSEND¬POTTER¬GOODWIN¬WALTON¬ROWE¬HAMPTON¬ORTEGA¬PATTON¬SWANSON¬JOSEPH¬FRANCIS¬GOODMAN¬MALDONADO¬YATES¬BECKER¬ERICKSON¬HODGES¬RIOS¬CONNER¬ADKINS¬WEBSTER¬NORMAN¬MALONE¬HAMMOND¬FLOWERS¬COBB¬MOODY¬QUINN¬BLAKE¬MAXWELL¬POPE¬FLOYD¬OSBORNE¬PAUL¬MCCARTHY¬GUERRERO¬LINDSEY¬ESTRADA¬SANDOVAL¬GIBBS¬TYLER¬GROSS¬FITZGERALD¬STOKES¬DOYLE¬SHERMAN¬SAUNDERS¬WISE¬COLON¬GILL¬ALVARADO¬GREER¬PADILLA¬SIMON¬WATERS¬NUNEZ¬BALLARD¬SCHWARTZ¬MCBRIDE¬HOUSTON¬CHRISTENSEN¬KLEIN¬PRATT¬BRIGGS¬PARSONS¬MCLAUGHLIN¬ZIMMERMAN¬FRENCH¬BUCHANAN¬MORAN¬COPELAND¬ROY¬PITTMAN¬BRADY¬MCCORMICK¬HOLLOWAY¬BROCK¬POOLE¬FRANK¬LOGAN¬OWEN¬BASS¬MARSH¬DRAKE¬WONG¬JEFFERSON¬PARK¬MORTON¬ABBOTT¬SPARKS¬PATRICK¬NORTON¬HUFF¬CLAYTON¬MASSEY¬LLOYD¬FIGUEROA¬CARSON¬BOWERS¬ROBERSON¬BARTON¬TRAN¬LAMB¬HARRINGTON¬CASEY¬BOONE¬CORTEZ¬CLARKE¬MATHIS¬SINGLETON¬WILKINS¬CAIN¬BRYAN¬UNDERWOOD¬HOGAN¬MCKENZIE¬COLLIER¬LUNA¬PHELPS¬MCGUIRE¬ALLISON¬BRIDGES¬WILKERSON¬NASH¬SUMMERS¬ATKINS¬WILCOX¬PITTS¬CONLEY¬MARQUEZ¬BURNETT¬RICHARD¬COCHRAN¬CHASE¬DAVENPORT¬HOOD¬GATES¬CLAY¬AYALA¬SAWYER¬ROMAN¬VAZQUEZ¬DICKERSON¬HODGE¬ACOSTA¬FLYNN¬ESPINOZA¬NICHOLSON¬MONROE¬WOLF¬MORROW¬KIRK¬RANDALL¬ANTHONY¬WHITAKER¬OCONNOR¬SKINNER¬WARE¬MOLINA¬KIRBY¬HUFFMAN¬BRADFORD¬CHARLES¬GILMORE¬DOMINGUEZ¬ONEAL¬BRUCE¬LANG¬COMBS¬KRAMER¬HEATH¬HANCOCK¬GALLAGHER¬GAINES¬SHAFFER¬SHORT¬WIGGINS¬MATHEWS¬MCCLAIN¬FISCHER¬WALL¬SMALL¬MELTON¬HENSLEY¬BOND¬DYER¬CAMERON¬GRIMES¬CONTRERAS¬CHRISTIAN¬WYATT¬BAXTER¬SNOW¬MOSLEY¬SHEPHERD¬LARSEN¬HOOVER¬BEASLEY¬GLENN¬PETERSEN¬WHITEHEAD¬MEYERS¬KEITH¬GARRISON¬VINCENT¬SHIELDS¬HORN¬SAVAGE¬OLSEN¬SCHROEDER¬HARTMAN¬WOODARD¬MUELLER¬KEMP¬DELEON¬BOOTH¬PATEL¬CALHOUN¬WILEY¬EATON¬CLINE¬NAVARRO¬HARRELL¬LESTER¬HUMPHREY¬PARRISH¬DURAN¬HUTCHINSON¬HESS¬DORSEY¬BULLOCK¬ROBLES¬BEARD¬DALTON¬AVILA¬VANCE¬RICH¬BLACKWELL¬YORK¬JOHNS¬BLANKENSHIP¬TREVINO¬SALINAS¬CAMPOS¬PRUITT¬MOSES¬CALLAHAN¬GOLDEN¬MONTOYA¬HARDIN¬GUERRA¬MCDOWELL¬CAREY¬STAFFORD¬GALLEGOS¬HENSON¬WILKINSON¬BOOKER¬MERRITT¬MIRANDA¬ATKINSON¬ORR¬DECKER¬HOBBS¬PRESTON¬TANNER¬KNOX¬PACHECO¬STEPHENSON¬GLASS¬ROJAS¬SERRANO¬MARKS¬HICKMAN¬ENGLISH¬SWEENEY¬STRONG¬PRINCE¬MCCLURE¬CONWAY¬WALTER¬ROTH¬MAYNARD¬FARRELL¬LOWERY¬HURST¬NIXON¬WEISS¬TRUJILLO¬ELLISON¬SLOAN¬JUAREZ¬WINTERS¬MCLEAN¬RANDOLPH¬LEON¬BOYER¬VILLARREAL¬MCCALL¬GENTRY¬CARRILLO¬KENT¬AYERS¬LARA¬SHANNON¬SEXTON¬PACE¬HULL¬LEBLANC¬BROWNING¬VELASQUEZ¬LEACH¬CHANG¬HOUSE¬SELLERS¬HERRING¬NOBLE¬FOLEY¬BARTLETT¬MERCADO¬LANDRY¬DURHAM¬WALLS¬BARR¬MCKEE¬BAUER¬RIVERS¬EVERETT¬BRADSHAW¬PUGH¬VELEZ¬RUSH¬ESTES¬DODSON¬MORSE¬SHEPPARD¬WEEKS¬CAMACHO¬BEAN¬BARRON¬LIVINGSTON¬MIDDLETON¬SPEARS¬BRANCH¬BLEVINS¬CHEN¬KERR¬MCCONNELL¬HATFIELD¬HARDING¬ASHLEY¬SOLIS¬HERMAN¬FROST¬GILES¬BLACKBURN¬WILLIAM¬PENNINGTON¬WOODWARD¬FINLEY¬MCINTOSH¬KOCH¬BEST¬SOLOMON¬MCCULLOUGH¬DUDLEY¬NOLAN¬BLANCHARD¬RIVAS¬BRENNAN¬MEJIA¬KANE¬BENTON¬JOYCE¬BUCKLEY¬HALEY¬VALENTINE¬MADDOX¬RUSSO¬MCKNIGHT¬BUCK¬MOON¬MCMILLAN¬CROSBY¬BERG¬DOTSON¬MAYS¬ROACH¬CHURCH¬CHAN¬RICHMOND¬MEADOWS¬FAULKNER¬ONEILL¬KNAPP¬KLINE¬BARRY¬OCHOA¬JACOBSON¬GAY¬AVERY¬HENDRICKS¬HORNE¬SHEPARD¬HEBERT¬CHERRY¬CARDENAS¬MCINTYRE¬WHITNEY¬WALLER¬HOLMAN¬DONALDSON¬CANTU¬TERRELL¬MORIN¬GILLESPIE¬FUENTES¬TILLMAN¬SANFORD¬BENTLEY¬PECK¬KEY¬SALAS¬ROLLINS¬GAMBLE¬DICKSON¬BATTLE¬SANTANA¬CABRERA¬CERVANTES¬HOWE¬HINTON¬HURLEY¬SPENCE¬ZAMORA¬YANG¬MCNEIL¬SUAREZ¬CASE¬PETTY¬GOULD¬MCFARLAND¬SAMPSON¬CARVER¬BRAY¬ROSARIO¬MACDONALD¬STOUT¬HESTER¬MELENDEZ¬DILLON¬FARLEY¬HOPPER¬GALLOWAY¬POTTS¬BERNARD¬JOYNER¬STEIN¬AGUIRRE¬OSBORN¬MERCER¬BENDER¬FRANCO¬ROWLAND¬SYKES¬BENJAMIN¬TRAVIS¬PICKETT¬CRANE¬SEARS¬MAYO¬DUNLAP¬HAYDEN¬WILDER¬MCKAY¬COFFEY¬MCCARTY¬EWING¬COOLEY¬VAUGHAN¬BONNER¬COTTON¬HOLDER¬STARK¬FERRELL¬CANTRELL¬FULTON¬LYNN¬LOTT¬CALDERON¬ROSA¬POLLARD¬HOOPER¬BURCH¬MULLEN¬FRY¬RIDDLE¬LEVY¬DAVID¬DUKE¬ODONNELL¬GUY¬MICHAEL¬BRITT¬FREDERICK¬DAUGHERTY¬BERGER¬DILLARD¬ALSTON¬JARVIS¬FRYE¬RIGGS¬CHANEY¬ODOM¬DUFFY¬FITZPATRICK¬VALENZUELA¬MERRILL¬MAYER¬ALFORD¬MCPHERSON¬ACEVEDO¬DONOVAN¬BARRERA¬ALBERT¬COTE¬REILLY¬COMPTON¬RAYMOND¬MOONEY¬MCGOWAN¬CRAFT¬CLEVELAND¬CLEMONS¬WYNN¬NIELSEN¬BAIRD¬STANTON¬SNIDER¬ROSALES¬BRIGHT¬WITT¬STUART¬HAYS¬HOLDEN¬RUTLEDGE¬KINNEY¬CLEMENTS¬CASTANEDA¬SLATER¬HAHN¬EMERSON¬CONRAD¬BURKS¬DELANEY¬PATE¬LANCASTER¬SWEET¬JUSTICE¬TYSON¬SHARPE¬WHITFIELD¬TALLEY¬MACIAS¬IRWIN¬BURRIS¬RATLIFF¬MCCRAY¬MADDEN¬KAUFMAN¬BEACH¬GOFF¬CASH¬BOLTON¬MCFADDEN¬LEVINE¬GOOD¬BYERS¬KIRKLAND¬KIDD¬WORKMAN¬CARNEY¬DALE¬MCLEOD¬HOLCOMB¬ENGLAND¬FINCH¬HEAD¬BURT¬HENDRIX¬SOSA¬HANEY¬FRANKS¬SARGENT¬NIEVES¬DOWNS¬RASMUSSEN¬BIRD¬HEWITT¬LINDSAY¬LE¬FOREMAN¬VALENCIA¬ONEIL¬DELACRUZ¬VINSON¬DEJESUS¬HYDE¬FORBES¬GILLIAM¬GUTHRIE¬WOOTEN¬HUBER¬BARLOW¬BOYLE¬MCMAHON¬BUCKNER¬ROCHA¬PUCKETT¬LANGLEY¬KNOWLES¬COOKE¬VELAZQUEZ¬WHITLEY¬NOEL¬VANG¬",
"BE_PEETERS¬JANSSENS¬MAES¬JACOBS¬MERTENS¬WILLEMS¬CLAES¬GOOSSENS¬WOUTERS¬DE SMET¬",
"FR_MARTIN¬BERNARD¬THOMAS¬ROBERT¬RICHARD¬PETIT¬DURAND¬LEROY¬MOREAU¬SIMON¬LAURENT¬LEFEBVRE¬MICHEL¬GARCIA¬DAVID¬BERTRAND¬ROUX¬VINCENT¬FOURNIER¬¬MOREL¬GIRARD¬ANDRE¬LEFEVRE¬MERCIER¬",
"UK_SMITH¬JONES¬WILLIAMS¬TAYLOR¬BROWN¬DAVIES¬EVANS¬WILSON¬THOMAS¬JOHNSON¬ROBERTS¬ROBINSON¬THOMPSON¬WRIGHT¬WALKER¬WHITE¬EDWARDS¬HUGUES¬GREEN¬HALL¬LEWIS¬HARRIS¬CLARKE¬PATEL¬JACKSON¬");

//_/!\_ La liste des noms contient l'indicatif du pays identique a celui de l'IBAN, sauf exceptions decrites ci-apres, suivi d'un tiret ("-") et de la lettre "M" pour les prenoms Masculins ou exclusivement la lettre "F" pour les prenoms Feminins.  Les prenoms sont classes du plus populaire au moins reference.
// Correspondance des indicatifs par pays:
// - FR = France
// Exceptions (pour les pays n'utilisant pas l'IBAN): 
// - US = Les Etats-Unis d'Amerique
// Sources: 
// - US-M: http://names.mongabay.com/male_names.htm
// - US-F: http://names.mongabay.com/female_names.htm
// - Europe -M et -F: http://en.wikipedia.org/wiki/Most_popular_given_names
var lprenoms = new Array("US-M_JAMES¬JOHN¬ROBERT¬MICHAEL¬WILLIAM¬DAVID¬RICHARD¬CHARLES¬JOSEPH¬THOMAS¬CHRISTOPHER¬DANIEL¬PAUL¬MARK¬DONALD¬GEORGE¬KENNETH¬STEVEN¬EDWARD¬BRIAN¬RONALD¬ANTHONY¬KEVIN¬JASON¬MATTHEW¬GARY¬TIMOTHY¬JOSE¬LARRY¬JEFFREY¬FRANK¬SCOTT¬ERIC¬STEPHEN¬ANDREW¬RAYMOND¬GREGORY¬JOSHUA¬JERRY¬DENNIS¬WALTER¬PATRICK¬PETER¬HAROLD¬DOUGLAS¬HENRY¬CARL¬ARTHUR¬RYAN¬ROGER¬JOE¬JUAN¬JACK¬ALBERT¬JONATHAN¬JUSTIN¬TERRY¬GERALD¬KEITH¬SAMUEL¬WILLIE¬RALPH¬LAWRENCE¬NICHOLAS¬ROY¬BENJAMIN¬BRUCE¬BRANDON¬ADAM¬HARRY¬FRED¬WAYNE¬BILLY¬STEVE¬LOUIS¬JEREMY¬AARON¬RANDY¬HOWARD¬EUGENE¬CARLOS¬RUSSELL¬BOBBY¬VICTOR¬MARTIN¬ERNEST¬PHILLIP¬TODD¬JESSE¬CRAIG¬ALAN¬SHAWN¬CLARENCE¬SEAN¬PHILIP¬CHRIS¬JOHNNY¬EARL¬JIMMY¬ANTONIO¬DANNY¬BRYAN¬TONY¬LUIS¬MIKE¬STANLEY¬LEONARD¬NATHAN¬DALE¬MANUEL¬RODNEY¬CURTIS¬NORMAN¬ALLEN¬MARVIN¬VINCENT¬GLENN¬JEFFERY¬TRAVIS¬JEFF¬CHAD¬JACOB¬LEE¬MELVIN¬ALFRED¬KYLE¬FRANCIS¬BRADLEY¬JESUS¬HERBERT¬FREDERICK¬RAY¬JOEL¬EDWIN¬DON¬EDDIE¬RICKY¬TROY¬RANDALL¬BARRY¬ALEXANDER¬BERNARD¬MARIO¬LEROY¬FRANCISCO¬MARCUS¬MICHEAL¬THEODORE¬CLIFFORD¬MIGUEL¬OSCAR¬JAY¬JIM¬TOM¬CALVIN¬ALEX¬JON¬RONNIE¬BILL¬LLOYD¬TOMMY¬LEON¬DEREK¬WARREN¬DARRELL¬JEROME¬FLOYD¬LEO¬ALVIN¬TIM¬WESLEY¬GORDON¬DEAN¬GREG¬JORGE¬DUSTIN¬PEDRO¬DERRICK¬DAN¬LEWIS¬ZACHARY¬COREY¬HERMAN¬MAURICE¬VERNON¬ROBERTO¬CLYDE¬GLEN¬HECTOR¬SHANE¬RICARDO¬SAM¬RICK¬LESTER¬BRENT¬RAMON¬CHARLIE¬TYLER¬GILBERT¬GENE¬MARC¬REGINALD¬RUBEN¬BRETT¬ANGEL¬NATHANIEL¬RAFAEL¬LESLIE¬EDGAR¬MILTON¬RAUL¬BEN¬CHESTER¬CECIL¬DUANE¬FRANKLIN¬ANDRE¬ELMER¬BRAD¬GABRIEL¬RON¬MITCHELL¬ROLAND¬ARNOLD¬HARVEY¬JARED¬ADRIAN¬KARL¬CORY¬CLAUDE¬ERIK¬DARRYL¬JAMIE¬NEIL¬JESSIE¬CHRISTIAN¬JAVIER¬FERNANDO¬CLINTON¬TED¬MATHEW¬TYRONE¬DARREN¬LONNIE¬LANCE¬CODY¬JULIO¬KELLY¬KURT¬ALLAN¬NELSON¬GUY¬CLAYTON¬HUGH¬MAX¬DWAYNE¬DWIGHT¬ARMANDO¬FELIX¬JIMMIE¬EVERETT¬JORDAN¬IAN¬WALLACE¬KEN¬BOB¬JAIME¬CASEY¬ALFREDO¬ALBERTO¬DAVE¬IVAN¬JOHNNIE¬SIDNEY¬BYRON¬JULIAN¬ISAAC¬MORRIS¬CLIFTON¬WILLARD¬DARYL¬ROSS¬VIRGIL¬ANDY¬MARSHALL¬SALVADOR¬PERRY¬KIRK¬SERGIO¬MARION¬TRACY¬SETH¬KENT¬TERRANCE¬RENE¬EDUARDO¬TERRENCE¬ENRIQUE¬FREDDIE¬WADE¬",

"US-F_MARY¬PATRICIA¬LINDA¬BARBARA¬ELIZABETH¬JENNIFER¬MARIA¬SUSAN¬MARGARET¬DOROTHY¬LISA¬NANCY¬KAREN¬BETTY¬HELEN¬SANDRA¬DONNA¬CAROL¬RUTH¬SHARON¬MICHELLE¬LAURA¬SARAH¬KIMBERLY¬DEBORAH¬JESSICA¬SHIRLEY¬CYNTHIA¬ANGELA¬MELISSA¬BRENDA¬AMY¬ANNA¬REBECCA¬VIRGINIA¬KATHLEEN¬PAMELA¬MARTHA¬DEBRA¬AMANDA¬STEPHANIE¬CAROLYN¬CHRISTINE¬MARIE¬JANET¬CATHERINE¬FRANCES¬ANN¬JOYCE¬DIANE¬ALICE¬JULIE¬HEATHER¬TERESA¬DORIS¬GLORIA¬EVELYN¬JEAN¬CHERYL¬MILDRED¬KATHERINE¬JOAN¬ASHLEY¬JUDITH¬ROSE¬JANICE¬KELLY¬NICOLE¬JUDY¬CHRISTINA¬KATHY¬THERESA¬BEVERLY¬DENISE¬TAMMY¬IRENE¬JANE¬LORI¬RACHEL¬MARILYN¬ANDREA¬KATHRYN¬LOUISE¬SARA¬ANNE¬JACQUELINE¬WANDA¬BONNIE¬JULIA¬RUBY¬LOIS¬TINA¬PHYLLIS¬NORMA¬PAULA¬DIANA¬ANNIE¬LILLIAN¬EMILY¬ROBIN¬PEGGY¬CRYSTAL¬GLADYS¬RITA¬DAWN¬CONNIE¬FLORENCE¬TRACY¬EDNA¬TIFFANY¬CARMEN¬ROSA¬CINDY¬GRACE¬WENDY¬VICTORIA¬EDITH¬KIM¬SHERRY¬SYLVIA¬JOSEPHINE¬THELMA¬SHANNON¬SHEILA¬ETHEL¬ELLEN¬ELAINE¬MARJORIE¬CARRIE¬CHARLOTTE¬MONICA¬ESTHER¬PAULINE¬EMMA¬JUANITA¬ANITA¬RHONDA¬HAZEL¬AMBER¬EVA¬DEBBIE¬APRIL¬LESLIE¬CLARA¬LUCILLE¬JAMIE¬JOANNE¬ELEANOR¬VALERIE¬DANIELLE¬MEGAN¬ALICIA¬SUZANNE¬MICHELE¬GAIL¬BERTHA¬DARLENE¬VERONICA¬JILL¬ERIN¬GERALDINE¬LAUREN¬CATHY¬JOANN¬LORRAINE¬LYNN¬SALLY¬REGINA¬ERICA¬BEATRICE¬DOLORES¬BERNICE¬AUDREY¬YVONNE¬ANNETTE¬JUNE¬SAMANTHA¬MARION¬DANA¬STACY¬ANA¬RENEE¬IDA¬VIVIAN¬ROBERTA¬HOLLY¬BRITTANY¬MELANIE¬LORETTA¬YOLANDA¬JEANETTE¬LAURIE¬KATIE¬KRISTEN¬VANESSA¬ALMA¬SUE¬ELSIE¬BETH¬JEANNE¬VICKI¬CARLA¬TARA¬ROSEMARY¬EILEEN¬TERRI¬GERTRUDE¬LUCY¬TONYA¬ELLA¬STACEY¬WILMA¬GINA¬KRISTIN¬JESSIE¬NATALIE¬AGNES¬VERA¬WILLIE¬CHARLENE¬BESSIE¬DELORES¬MELINDA¬PEARL¬ARLENE¬MAUREEN¬COLLEEN¬ALLISON¬TAMARA¬JOY¬GEORGIA¬CONSTANCE¬LILLIE¬CLAUDIA¬JACKIE¬MARCIA¬TANYA¬NELLIE¬MINNIE¬MARLENE¬HEIDI¬GLENDA¬LYDIA¬VIOLA¬COURTNEY¬MARIAN¬STELLA¬CAROLINE¬DORA¬JO¬VICKIE¬MATTIE¬TERRY¬MAXINE¬IRMA¬MABEL¬MARSHA¬MYRTLE¬LENA¬CHRISTY¬DEANNA¬PATSY¬HILDA¬GWENDOLYN¬JENNIE¬NORA¬MARGIE¬NINA¬CASSANDRA¬LEAH¬PENNY¬KAY¬PRISCILLA¬NAOMI¬CAROLE¬BRANDY¬OLGA¬BILLIE¬DIANNE¬TRACEY¬LEONA¬JENNY¬FELICIA¬SONIA¬MIRIAM¬VELMA¬BECKY¬BOBBIE¬VIOLET¬KRISTINA¬TONI¬MISTY¬MAE¬SHELLY¬DAISY¬RAMONA¬SHERRI¬ERIKA¬KATRINA¬CLAIRE¬LINDSEY¬LINDSAY¬GENEVA¬GUADALUPE¬BELINDA¬MARGARITA¬SHERYL¬CORA¬FAYE¬ADA¬NATASHA¬SABRINA¬ISABEL¬MARGUERITE¬HATTIE¬HARRIET¬MOLLY¬CECILIA¬KRISTI¬BRANDI¬BLANCHE¬SANDY¬ROSIE¬JOANNA¬IRIS¬EUNICE¬ANGIE¬INEZ¬LYNDA¬MADELINE¬AMELIA¬ALBERTA¬GENEVIEVE¬MONIQUE¬JODI¬JANIE¬MAGGIE¬KAYLA¬SONYA¬JAN¬LEE¬KRISTINE¬CANDACE¬FANNIE¬MARYANN¬OPAL¬ALISON¬YVETTE¬MELODY¬LUZ¬SUSIE¬OLIVIA¬FLORA¬SHELLEY¬KRISTY¬MAMIE¬LULA¬LOLA¬VERNA¬BEULAH¬ANTOINETTE¬CANDICE¬JUANA¬JEANNETTE¬PAM¬KELLI¬HANNAH¬WHITNEY¬BRIDGET¬KARLA¬CELIA¬LATOYA¬PATTY¬SHELIA¬GAYLE¬DELLA¬VICKY¬LYNNE¬SHERI¬MARIANNE¬KARA¬JACQUELYN¬ERMA¬BLANCA¬MYRA¬LETICIA¬PAT¬KRISTA¬ROXANNE¬ANGELICA¬JOHNNIE¬ROBYN¬FRANCIS¬ADRIENNE¬ROSALIE¬ALEXANDRA¬BROOKE¬BETHANY¬SADIE¬BERNADETTE¬TRACI¬JODY¬KENDRA¬JASMINE¬NICHOLE¬RACHAEL¬CHELSEA¬MABLE¬ERNESTINE¬MURIEL¬MARCELLA¬ELENA¬KRYSTAL¬ANGELINA¬NADINE¬KARI¬ESTELLE¬DIANNA¬PAULETTE¬LORA¬MONA¬DOREEN¬ROSEMARIE¬ANGEL¬DESIREE¬ANTONIA¬HOPE¬GINGER¬JANIS¬BETSY¬CHRISTIE¬FREDA¬MERCEDES¬MEREDITH¬LYNETTE¬TERI¬CRISTINA¬EULA¬LEIGH¬MEGHAN¬SOPHIA¬ELOISE¬ROCHELLE¬GRETCHEN¬CECELIA¬RAQUEL¬HENRIETTA¬ALYSSA¬JANA¬KELLEY¬GWEN¬KERRY¬JENNA¬TRICIA¬LAVERNE¬OLIVE¬ALEXIS¬TASHA¬SILVIA¬ELVIRA¬CASEY¬DELIA¬SOPHIE¬KATE¬PATTI¬LORENA¬KELLIE¬SONJA¬LILA¬LANA¬DARLA¬MAY¬MINDY¬ESSIE¬MANDY¬LORENE¬ELSA¬JOSEFINA¬JEANNIE¬MIRANDA¬DIXIE¬LUCIA¬MARTA¬FAITH¬LELA¬JOHANNA¬SHARI¬CAMILLE¬TAMI¬SHAWNA¬ELISA¬EBONY¬MELBA¬ORA¬NETTIE¬TABITHA¬OLLIE¬JAIME¬WINIFRED¬KRISTIE¬MARINA¬ALISHA¬AIMEE¬RENA¬MYRNA¬MARLA¬TAMMIE¬LATASHA¬BONITA¬PATRICE¬RONDA¬SHERRIE¬ADDIE¬FRANCINE¬DELORIS¬STACIE¬ADRIANA¬CHERI¬SHELBY¬ABIGAIL¬CELESTE¬JEWEL¬CARA¬ADELE¬REBEKAH¬LUCINDA¬DORTHY¬CHRIS¬EFFIE¬TRINA¬REBA¬SHAWN¬SALLIE¬AURORA¬LENORA¬ETTA¬LOTTIE¬KERRI¬TRISHA¬NIKKI¬ESTELLA¬FRANCISCA¬JOSIE¬TRACIE¬MARISSA¬KARIN¬BRITTNEY¬JANELLE¬LOURDES¬LAUREL¬HELENE¬FERN¬ELVA¬CORINNE¬KELSEY¬INA¬BETTIE¬ELISABETH¬AIDA¬CAITLIN¬INGRID¬IVA¬EUGENIA¬CHRISTA¬GOLDIE¬CASSIE¬MAUDE¬JENIFER¬THERESE¬FRANKIE¬DENA¬LORNA¬JANETTE¬LATONYA¬CANDY¬MORGAN¬CONSUELO¬TAMIKA¬ROSETTA¬DEBORA¬CHERIE¬POLLY¬DINA¬JEWELL¬FAY¬JILLIAN¬DOROTHEA¬NELL¬TRUDY¬ESPERANZA¬PATRICA¬KIMBERLEY¬SHANNA¬HELENA¬CAROLINA¬CLEO¬STEFANIE¬ROSARIO¬OLA¬JANINE¬MOLLIE¬LUPE¬ALISA¬LOU¬MARIBEL¬SUSANNE¬BETTE¬SUSANA¬ELISE¬CECILE¬ISABELLE¬LESLEY¬JOCELYN¬PAIGE¬JONI¬RACHELLE¬LEOLA¬DAPHNE¬ALTA¬ESTER¬PETRA¬GRACIELA¬IMOGENE¬JOLENE¬KEISHA¬LACEY¬GLENNA¬GABRIELA¬KERI¬URSULA¬LIZZIE¬KIRSTEN¬SHANA¬ADELINE¬MAYRA¬JAYNE¬JACLYN¬GRACIE¬SONDRA¬CARMELA¬MARISA¬ROSALIND¬CHARITY¬TONIA¬BEATRIZ¬MARISOL¬CLARICE¬JEANINE¬SHEENA¬ANGELINE¬FRIEDA¬LILY¬ROBBIE¬SHAUNA¬MILLIE¬CLAUDETTE¬CATHLEEN¬ANGELIA¬GABRIELLE¬AUTUMN¬KATHARINE¬SUMMER¬JODIE¬STACI¬LEA¬CHRISTI¬JIMMIE¬JUSTINE¬ELMA¬LUELLA¬MARGRET¬DOMINIQUE¬SOCORRO¬RENE¬MARTINA¬MARGO¬MAVIS¬CALLIE¬BOBBI¬MARITZA¬LUCILE¬LEANNE¬JEANNINE¬DEANA¬AILEEN¬LORIE¬LADONNA¬WILLA¬MANUELA¬GALE¬SELMA¬DOLLY¬SYBIL¬ABBY¬LARA¬DALE¬IVY¬DEE¬WINNIE¬MARCY¬LUISA¬JERI¬MAGDALENA¬OFELIA¬MEAGAN¬AUDRA¬MATILDA¬LEILA¬CORNELIA¬BIANCA¬SIMONE¬BETTYE¬RANDI¬VIRGIE¬LATISHA¬BARBRA¬GEORGINA¬ELIZA¬LEANN¬BRIDGETTE¬RHODA¬HALEY¬ADELA¬NOLA¬BERNADINE¬FLOSSIE¬ILA¬GRETA¬RUTHIE¬NELDA¬MINERVA¬LILLY¬TERRIE¬LETHA¬HILARY¬ESTELA¬VALARIE¬BRIANNA¬ROSALYN¬EARLINE¬CATALINA¬AVA¬MIA¬CLARISSA¬LIDIA¬CORRINE¬ALEXANDRIA¬CONCEPCION¬TIA¬SHARRON¬RAE¬DONA¬ERICKA¬JAMI¬ELNORA¬CHANDRA¬LENORE¬NEVA¬MARYLOU¬MELISA¬TABATHA¬SERENA¬AVIS¬ALLIE¬SOFIA¬JEANIE¬ODESSA¬NANNIE¬HARRIETT¬LORAINE¬PENELOPE¬MILAGROS¬EMILIA¬BENITA¬ALLYSON¬ASHLEE¬TANIA¬TOMMIE¬ESMERALDA¬KARINA¬EVE¬PEARLIE¬ZELMA¬MALINDA¬NOREEN¬TAMEKA¬SAUNDRA¬HILLARY¬AMIE¬ALTHEA¬ROSALINDA¬JORDAN¬LILIA¬ALANA¬GAY¬CLARE¬ALEJANDRA¬ELINOR¬MICHAEL¬LORRIE¬JERRI¬DARCY¬EARNESTINE¬CARMELLA¬TAYLOR¬NOEMI¬MARCIE¬LIZA¬ANNABELLE¬LOUISA¬EARLENE¬MALLORY¬CARLENE¬NITA¬SELENA¬TANISHA¬KATY¬JULIANNE¬JOHN¬LAKISHA¬EDWINA¬MARICELA¬MARGERY¬KENYA¬DOLLIE¬ROXIE¬ROSLYN¬KATHRINE¬NANETTE¬CHARMAINE¬LAVONNE¬ILENE¬KRIS¬TAMMI¬SUZETTE¬CORINE¬KAYE¬JERRY¬MERLE¬CHRYSTAL¬LINA¬DEANNE¬LILIAN¬JULIANA¬ALINE¬LUANN¬KASEY¬MARYANNE¬EVANGELINE¬COLETTE¬MELVA¬LAWANDA¬YESENIA¬NADIA¬MADGE¬KATHIE¬EDDIE¬OPHELIA¬VALERIA¬NONA¬MITZI¬MARI¬GEORGETTE¬CLAUDINE¬FRAN¬ALISSA¬ROSEANN¬LAKEISHA¬SUSANNA¬REVA¬DEIDRE¬CHASITY¬SHEREE¬CARLY¬JAMES¬ELVIA¬ALYCE¬DEIRDRE¬GENA¬BRIANA¬ARACELI¬KATELYN¬ROSANNE¬WENDI¬TESSA¬BERTA¬MARVA¬IMELDA¬MARIETTA¬MARCI¬LEONOR¬ARLINE¬SASHA¬MADELYN¬JANNA¬JULIETTE¬DEENA¬AURELIA¬JOSEFA¬AUGUSTA¬LILIANA¬YOUNG¬CHRISTIAN¬LESSIE¬AMALIA¬SAVANNAH¬ANASTASIA¬VILMA¬NATALIA¬ROSELLA¬LYNNETTE¬CORINA¬ALFREDA¬LEANNA¬CAREY¬AMPARO¬COLEEN¬TAMRA¬AISHA¬WILDA¬KARYN¬CHERRY¬QUEEN¬MAURA¬MAI¬EVANGELINA¬ROSANNA¬HALLIE¬ERNA¬ENID¬MARIANA¬LACY¬JULIET¬JACKLYN¬FREIDA¬MADELEINE¬MARA¬HESTER¬CATHRYN¬LELIA¬CASANDRA¬BRIDGETT¬ANGELITA¬JANNIE¬DIONNE¬ANNMARIE¬KATINA¬BERYL¬PHOEBE¬MILLICENT¬KATHERYN¬DIANN¬CARISSA¬MARYELLEN¬LIZ¬LAURI¬HELGA¬GILDA¬ADRIAN¬RHEA¬MARQUITA¬HOLLIE¬TISHA¬TAMERA¬ANGELIQUE¬FRANCESCA¬BRITNEY¬KAITLIN¬LOLITA¬FLORINE¬ROWENA¬REYNA¬TWILA¬FANNY¬JANELL¬INES¬CONCETTA¬BERTIE¬ALBA¬BRIGITTE¬ALYSON¬VONDA¬PANSY¬ELBA¬NOELLE¬LETITIA¬KITTY¬DEANN¬BRANDIE¬LOUELLA¬LETA¬FELECIA¬SHARLENE¬LESA¬BEVERLEY¬ROBERT¬ISABELLA¬HERMINIA¬TERRA¬CELINA¬",
"BE-M_Noah¬Thomas¬Nathan¬Lucas¬Louis¬Arthur¬Milan¬Hugo¬Maxime¬Mohamed¬",
"UK-M_Jack¬Thomas¬Oliver¬Joshua¬Harry¬Charlie¬Daniel¬William¬James¬Alfie¬Jack¬James¬Matthew¬Daniel¬Ryan¬Thomas¬Adam¬Joshua¬Dylan¬Ben¬Lewis¬Jack¬Ryan¬James¬Callum¬Cameron¬Daniel¬Liam¬Jamie¬Kyle¬Jack¬Dylan¬Thomas¬Joshua¬Rhys¬Daniel¬Ethan¬Oliver¬William¬James¬",
"FR-M_Enzo¬Mathis¬Lucas¬Hugo¬Mathéo¬Nathan¬Théo¬Noah¬Mattéo¬Thomas¬",
"BE-F_Emma¬Marie¬Laura¬Julie¬Louise¬Clara¬Manon¬Léa¬Sarah¬Luna¬",
"UK-F_Grace¬Ruby¬Olivia¬Emily¬Jessica¬Sophie¬Chloe¬Lily¬Ella¬Amelia¬Ruby¬Megan¬Grace¬Chloe¬Emily¬Ffion¬Olivia¬Seren¬Ella¬Sophie¬Sophie¬Emma¬Lucy¬Katie¬Erin¬Ellie¬Amy¬Emily¬Chloe¬Olivia¬",
"FR-F_Emma¬Léa¬Manon¬Clara¬Chloé¬Inès¬Camille¬Sarah¬Océane¬Jade¬");

//==========================================================================================================
//=> La fonction permet d'extraire une valeur d'une liste dont les elements sont separes par une etoile * <=
//==========================================================================================================
function extraire(liste_asArray,ligne_asNumber,colonne_asNumber,separateur_asString)
{
var str0 = liste_asArray[ligne_asNumber];
var col = colonne_asNumber;
var strSep = separateur_asString;

var stra = str0;
var a = stra.search(strSep);
var cpta = 0;
var str1 = "";
while (a>=0)
{
	if (cpta==col)
	{
	str1 = stra.substr(0,a);
	a = -1;
	}
	else
	{
	stra = stra.substr(a+1,stra.length-a);
	a = stra.search(strSep);
	cpta++;
	}
} //end while

return str1;

} //end function

//==============================================================================================
//=> La fonction permet de charger la liste des cartes, des noms et prenoms dans la page HTML <=
//==============================================================================================
function chargement()
{
//#########################################################################
//#___Generation du menu deroulant pour la liste des cartes disponibles___#
//#########################################################################
strCarteModele = "<select id='SelectCarteModele' onChange='javascript:AfficherNation();'>";
for(i=0;i<lcartes.length;i++)
{
var strType = extraire(lcartes,i,0,"¬");
var strBanque = extraire(lcartes,i,1,"¬");
var strModele = extraire(lcartes,i,2,"¬");
var strCarte = strType;
if (strBanque=="")
{
	if (strModele=="")
	{
	//rien
	}
	else
	{
	strCarte += " - Modèle "+ strModele;
	} //end if else
}
else
{
	if (strModele=="")
	{
	strCarte += " ("+ strBanque +")";
	}
	else
	{
	strCarte += " ("+ strBanque +") - Modèle "+ strModele;
	} //end if else

} //end if else
strCarteModele += "<option value ="+ i +">"+ strCarte +"</option>";
} //end for i
document.getElementById("CarteModele").innerHTML = strCarteModele + "</select>";

//#####################################################################################################
//#___Generation du menu deroulant pour la liste des nationalites disponibles pour les noms/prenoms___#
//#####################################################################################################

//__Recherche du nombre de nations disponibles dans la liste des noms__
var lcptNoms = new Array();
var cpt = 0;
for(i=0;i<lnoms.length;i++)
{
	var strNom = lnoms[i].substr(0,2);
	var deja = 0;
	for(j=0;j<cpt;j++)
	{
		if (strNom == lcptNoms[j])
		{
		deja = 1;
		}
	} //end for j
	if (deja == 0)
	{
	lcptNoms[cpt] = strNom;
	cpt++;
	}
} //end for i

//__Recherche du nombre de nations disponibles dans la liste des prenoms__
var lcptPrenoms = new Array();
var cpt = 0;
for(i=0;i<lprenoms.length;i++)
{
	var strPrenom = lprenoms[i].substr(0,2);
	var deja = 0;
	for(j=0;j<cpt;j++)
	{
		if (strPrenom == lcptPrenoms[j])
		{
		deja = 1;
		}
	} //end for j
	if (deja == 0)
	{
	lcptPrenoms[cpt] = strPrenom;
	cpt++;
	}
} //end for i

//__Recherche du nombre de nations identiques entre les 2 listes lcptNoms et lcptPrenoms__
var lcptNations = new Array();
var cpt = 0;
for(i=0;i<lnoms.length;i++)
{
	for(j=0;j<lprenoms.length;j++)
	{
		if (lcptNoms[i] == lcptPrenoms[j])
		{
		var strNation = lcptNoms[i];
		}
		var deja = 0;
		for(k=0;k<cpt;k++)
		{
			if (strNation == lcptNations[k])
			{
			deja = 1;
			}
		} //end for k
		if (deja == 0)
		{
		lcptNations[cpt] = strNation;
		cpt++;
		}
	} //end for j
} //end for i

//__Creation de la liste deroulante__
strNations = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
strNations += "<input type='checkbox' id='CheckBoxFixerNation'> ";
strNations += "Fixer la nationalité du titulaire : ";
strNations += "<select id='SelectFixerNation' onchange=";
strNations += '"javascript:document.getElementById(';
strNations += "'CheckBoxFixerNation').checked=true;";
strNations += '">';
for(i=0;i<lcptNations.length;i++)
{
strNations += "<option value ='"+ lcptNations[i] +"'>"+ lcptNations[i] +"</option>";
} //end for i
strNations += "</select> (liste produite a partir des noms et prenoms disponibles pour une meme nationalite)";
strNations += "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
strNations += "Par défaut, la nationalité du titulaire est basée sur la liste définie pour le modèle de carte sélectionné.";

document.getElementById("Nations").innerHTML = strNations;

} //end function

//============================================================================================================
//=> La fonction permet de verifier si valeurs saisies pour les options selectionnees sont correctes ou non <=
//============================================================================================================
function verifier()
{
var index = document.getElementById("SelectCarteModele").selectedIndex;

//_____Liste de verification des options_____
//__[0] = nb de numeros a generer
//__[1] = numero de carte fixe
//__[2] = cvc
//__[3] = date
//__[4] = nom du titulaire
//__[5] = doublons carte
//__[6] = suites carte
//__[7] = doublons cvc
//__[8] = suites cvc
//__[9] = Afficher Prenom Complet
//__[10] = CVC a partir de 2 cles via T-DES
//__[11] = Afficher les resultats dans une zone de texte
//__[12] = Fixer la nationalite du titulaire
var lverif = new Array(1,
"Generer",
"Generer",
"Generer",
"Generer",
0,
0,
0,
0,
false,
false,
false,
"Generer");

//___Option: Quantite de cartes a generer ?___
if (document.getElementById("CheckBoxNbCB").checked==true)
{
	var strNumero = document.getElementById("NbCB").value;
	if (strNumero=="")
	{
	alert("Vous n'avez pas saisi de quantite de cartes a generer.\nUn seul numero de carte sera donc genere.");
	}
	else
	{
	lverif[0] = Number(strNumero);
	} //end if else
} //end if then

//___Option: Numero de carte fixe ?___
if (document.getElementById("CheckBoxFixerCarte").checked==true)
{
	var strNumero = document.getElementById("FixerCarte").value;
	if (strNumero=="")
	{
	alert("Vous n'avez pas saisi de numero de carte bancaire.\nLe numero sera donc genere automatiquement.");
	}
	else
	{
	strNumero = strNumero.replace(/-/g, "");
	strNumero = strNumero.replace(/ /g, "");
	var taille = Number(extraire(lcartes,index,4,"¬"));
		if (strNumero.length==taille)
		{
		lverif[1] = strNumero;
		}
		else
		{
		alert("La taille du numero de carte bancaire saisi ("+ strNumero.length +") ne correspond pas a celle du modele de carte selectionne ("+ taille +").\nLe numero sera donc genere automatiquement.");
		} //end if else
	} //end if else
} //end if then

//___Option: Numero de controle (CVC) fixe ?___
if (document.getElementById("CheckBoxFixerCVC").checked==true)
{
	var strCVC = document.getElementById("FixerCVC").value;
	if (strCVC=="")
	{
	alert("Vous n'avez pas saisi de numero de controle (CVC).\nLe numero sera donc genere automatiquement.");
	}
	else
	{
	strCVC = strCVC.replace(/ /g, "");
	var taille = Number(extraire(lcartes,index,6,"¬"));
		if (strCVC.length==taille)
		{
		lverif[2] = strCVC;
		}
		else
		{
		alert("La taille du numero de controle (CVC) saisi ("+ strCVC.length +") ne correspond pas a celle du modele de carte selectionne ("+ taille +").\nLe numero sera donc genere automatiquement.");
		} //end if else
	} //end if else
} //end if then

//___Option: Date fixe ?___
if (document.getElementById("CheckBoxFixerDate").checked==true)
{
	var indexMois = document.getElementById("mois").selectedIndex;
	var mois = document.getElementById("mois").options[indexMois].value;
	var indexAnnee = document.getElementById("annee").selectedIndex;
	var annee = document.getElementById("annee").options[indexAnnee].value;
	lverif[3] = mois +"/"+ annee;
} //end if then

//___Option: Nom du titulaire fixe ?___
if (document.getElementById("CheckBoxFixerNom").checked==true)
{
	var strTitulaire = document.getElementById("FixerNom").value;
	if (strTitulaire=="")
	{
	alert("Vous n'avez pas saisi de nom de titulaire.\nLe nom sera donc genere automatiquement.");
	}
	else
	{
	lverif[4] = strTitulaire;
	} //end if else
} //end if then

//___Option: Interdire doublons dans le numero de carte ?___
if (document.getElementById("CheckBoxDoublonsCarte").checked==true)
{
	var strDoublonsCarte = document.getElementById("DoublonsCarte").value;
	if (strDoublonsCarte=="")
	{
	alert("Vous n'avez pas saisi le nombre maximum de chiffres a considerer par doublons.\nLes doublons ne seront donc pas interdits.");
	}
	else
	{
	lverif[5] = Number(strDoublonsCarte);
	} //end if else

	if (document.getElementById("CheckBoxFixerCarte").checked==true)
	{
	alert("L'interdiction des doublons ne s'applique pas sur le numero de carte fixé.");
	}
} //end if then

//___Option: Interdire suites dans le numero de carte ?___
if (document.getElementById("CheckBoxSuitesCarte").checked==true)
{
	var strSuitesCarte = document.getElementById("SuitesCarte").value;
	if (strSuitesCarte=="")
	{
	alert("Vous n'avez pas saisi le nombre maximum de chiffres pour une suite a interdire.\nLes suites ne seront donc pas interdites.");
	}
	else
	{
	lverif[6] = Number(strSuitesCarte);
	} //end if else

	if (document.getElementById("CheckBoxFixerCarte").checked==true)
	{
	alert("L'interdiction des suites ne s'applique pas sur le numero de carte fixé.");
	}
} //end if then

//___Option: Interdire doublons dans le numero de controle (CVC) ?___
if (document.getElementById("CheckBoxDoublonsCVC").checked==true)
{
	var strDoublonsCVC = document.getElementById("DoublonsCVC").value;
	if (strDoublonsCVC=="")
	{
	alert("Vous n'avez pas saisi le nombre maximum de chiffres a considerer par doublons.\nLes doublons ne seront donc pas interdits.");
	}
	else
	{
	lverif[7] = Number(strDoublonsCVC);
	} //end if else

	if (document.getElementById("CheckBoxFixerCVC").checked==true)
	{
	alert("L'interdiction des doublons ne s'applique pas sur le numero de controle (CVC) fixé.");
	}

} //end if then

//___Option: Interdire suites dans le numero de controle (CVC) ?___
if (document.getElementById("CheckBoxSuitesCVC").checked==true)
{
	var strSuitesCVC = document.getElementById("SuitesCVC").value;
	if (strSuitesCVC=="")
	{
	alert("Vous n'avez pas saisi le nombre maximum de chiffres pour une suite a interdire.\nLes suites ne seront donc pas interdites.");
	}
	else
	{
	lverif[8] = Number(strSuitesCVC);
	} //end if else

	if (document.getElementById("CheckBoxFixerCVC").checked==true)
	{
	alert("L'interdiction des suites ne s'applique pas sur le numero de controle (CVC) fixé.");
	}
} //end if then

//___Option: Afficher Prenom Complet ?___
if (document.getElementById("CheckBoxPrenomComplet").checked==true)
{
	lverif[9] = true;
} //end if then

//___Option: Generer le numero ce controle (CVC) a partir de 2 cles en utilisant le Triple-DES ?___
if (document.getElementById("CheckBoxDESCVC").checked==true)
{
	lverif[10] = true;
} //end if then

//___Option: Afficher Resultats dans une Zone de Texte ?___
if (document.getElementById("CheckBoxTypeAffichage").checked==true)
{
	lverif[11] = true;
} //end if then

//___Option: NAtionalite du titulaire fixe ?___
if (document.getElementById("CheckBoxFixerNation").checked==true)
{
	var indexNation = document.getElementById("SelectFixerNation").selectedIndex;
	var strNation = document.getElementById("SelectFixerNation").options[indexNation].value;
	lverif[12] = strNation;
} //end if then

return lverif;

} //end function

//======================
//=> GenererCarte.txt <=
//======================
function genererCarte(index_asNumber)
{
var index = index_asNumber;

var strChiffres = "0123456789";
var strPrefixe = extraire(lcartes,index,3,"¬");
var taille = Number(extraire(lcartes,index,4,"¬"));

var strCarte = strPrefixe;

var restant = taille - strPrefixe.length - 1;

for(i=0;i<restant;i++)
{
var aleatoire = Math.floor((strChiffres.length) * Math.random());
strCarte += strChiffres.substr(aleatoire,1);
}

strCarte += trouverCleLuhn(strCarte);

return strCarte;
} //end function

//=========================================================================================================================
//=> La fonction permet de trouver le dernier chiffre d'un numero de carte bancaire selon l'algorithme de la Cle de Luhn <=
//=========================================================================================================================
//Source: http://javascript.internet.com/forms/val-credit-card.html
function trouverCleLuhn(numero_asString)
{

var str0 = numero_asString;
var strCle = "0123456789";
var cle = 0;
var str1 = str0 + strCle.substr(cle,1);
while (mod10(str1) == false)
{
cle++;
str1 = str0 + strCle.substr(cle,1);
}

return strCle.substr(cle,1);
} //end function

function mod10(numero_asString)
{
var str0 = numero_asString;
var lstr0 = new Array(str0.length);
var n = 0;
for(n=0;n<str0.length;n++)
{
lstr0[n] = parseInt(str0.charAt(n));
} //end for n

for(n=lstr0.length-2;n>=0;n-=2)
{
lstr0[n] *= 2;
if (lstr0[n] > 9)
{lstr0[n] -= 9;}
} //end for n

var s = 0;
for(n=0;n<lstr0.length;n++)
{
s += lstr0[n];
} //end for n

return (((s%10)==0)?true : false);
} //end function

//===========================
//=> GenererCVC_Random.txt <=
//===========================
function genererCVC_random(index_asNumber)
{
var index = index_asNumber;

var strChiffres = "0123456789";
var taille = Number(extraire(lcartes,index,6,"¬"));

var strCVC = "";

for(i=0;i<taille;i++)
{
var aleatoire = Math.floor((strChiffres.length) * Math.random());
strCVC += strChiffres.substr(aleatoire,1);
}

return strCVC;
} //end function

//================================
//=> DataEncryptionStandard.txt <=
//================================

//Source: http://people.eku.edu/styere/Encrypt/JS-DES.html

// special value stored in x[0] to indicate a problem
var ERROR_VAL = -9876;

// initial permutation (split into left/right halves )
// since DES numbers bits starting at 1, we will ignore x[0]
var IP_perm = new Array( -1,
	58, 50, 42, 34, 26, 18, 10, 2,
	60, 52, 44, 36, 28, 20, 12, 4,
	62, 54, 46, 38, 30, 22, 14, 6,
	64, 56, 48, 40, 32, 24, 16, 8,
	57, 49, 41, 33, 25, 17, 9, 1,
	59, 51, 43, 35, 27, 19, 11, 3,
	61, 53, 45, 37, 29, 21, 13, 5,
	63, 55, 47, 39, 31, 23, 15, 7 );

// final permutation (inverse initial permutation)
var FP_perm = new Array( -1,
	40, 8, 48, 16, 56, 24, 64, 32,
	39, 7, 47, 15, 55, 23, 63, 31,
	38, 6, 46, 14, 54, 22, 62, 30,
	37, 5, 45, 13, 53, 21, 61, 29,
	36, 4, 44, 12, 52, 20, 60, 28,
	35, 3, 43, 11, 51, 19, 59, 27,
	34, 2, 42, 10, 50, 18, 58, 26,
	33, 1, 41, 9, 49, 17, 57, 25 );

// per-round expansion
var E_perm = new Array( -1,
	32, 1, 2, 3, 4, 5,
	4, 5, 6, 7, 8, 9,
	8, 9, 10, 11, 12, 13,
	12, 13, 14, 15, 16, 17,
	16, 17, 18, 19, 20, 21,
	20, 21, 22, 23, 24, 25,
	24, 25, 26, 27, 28, 29,
	28, 29, 30, 31, 32, 1 );

// per-round permutation
var P_perm = new Array( -1,
	16, 7, 20, 21, 29, 12, 28, 17,
	1, 15, 23, 26, 5, 18, 31, 10,
	2, 8, 24, 14, 32, 27, 3, 9,
	19, 13, 30, 6, 22, 11, 4, 25 );

// note we do use element 0 in the S-Boxes
var S1 = new Array(
	14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
	0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
	4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
	15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 );
var S2 = new Array(
	15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
	3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
	0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
	13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 );
var S3 = new Array(
	10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
	13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
	13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
	1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 );
var S4 = new Array(
	7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
	13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
	10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
	3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 );
var S5 = new Array(
	2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
	14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
	4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
	11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 );
var S6 = new Array(
	12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
	10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
	9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
	4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 );
var S7 = new Array(
	4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
	13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
	1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
	6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 );
var S8 = new Array(
	13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
	1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
	7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
	2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 );

//, first, key, permutation
var PC_1_perm = new Array( -1, 
	// C subkey bits
	57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
	10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
	// D subkey bits
	63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
	14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 );

//, per-round, key, selection, permutation
var PC_2_perm = new Array( -1, 
	14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
	23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
	41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
	44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 );

// save output in case we want to reformat it later
var DES_output = new Array( 65 );

// remove spaces from input
function remove_spaces( instr )
{
   var i;
   var outstr="";

   for( i=0; i<instr.length; i++ )
      if ( instr.charAt(i) != " " )
         // not a space, include it
         outstr += instr.charAt(i);

   return outstr;
} //end function

// split an integer into bits
// ary   = array to store bits in
// start = starting subscript
// bitc  = number of bits to convert
// val   = number to convert
function split_int( ary, start, bitc, val )
{
   var i = start;
   var j;
   for( j=bitc-1; j>=0; j-- )
   {
      // isolate low-order bit
      ary[i+j] = val & 1;
      // remove that bit
      val >>= 1;
   }
} //end function

// get the message to encrypt/decrypt
function get_value( bitarray, str, isASCII )
{
   var i;
   var val;	// one hex digit

   // insert note we probably are ok
   bitarray[0] = -1;

   if ( isASCII )
   {
      // check length of data
      if ( str.length != 8 )
      {
         window.alert("Message and key must be 64 bits (8 ASCII characters)");
         bitarray[0] = ERROR_VAL;
         return
      }

      // have ASCII data
      for( i=0; i<8; i++ )
      {
         split_int( bitarray, i*8+1, 8, str.charCodeAt(i) );
      }
   }
   else
   {
      // have hex data - remove any spaces they used, then convert
      str = remove_spaces(str);

      // check length of data
      if ( str.length != 16 )
      {
         window.alert("Message and key must be 64 bits (16 hex digits)");
         bitarray[0] = ERROR_VAL;
         return;
      }

      for( i=0; i<16; i++ )
      {
         // get the next hex digit
         val = str.charCodeAt(i);

         // do some error checking
         if ( val >= 48 && val <= 57 )
            // have a valid digit 0-9
            val -= 48;
         else if ( val >= 65 && val <= 70 )
            // have a valid digit A-F
            val -= 55;
         else if ( val >= 97 && val <= 102 )
            // have a valid digit A-F
            val -= 87;
         else
         {
            // not 0-9 or A-F, complain
            window.alert( str.charAt(i)+" is not a valid hex digit" );
            bitarray[0] = ERROR_VAL;
            return;
         }

         // add this digit to the array
         split_int( bitarray, i*4+1, 4, val-48 );
      }
   }
} //end function

// format the output in the desired form
// if -1, use existing value
// -- uses the global array DES_output
function format_DES_output( outputType_asBoolean )
{
   var i;
   var bits;
   var str="";

   // what type of data do we have to work with?
   if ( outputType_asBoolean == true )
   {
      // convert each set of bits back to ASCII
      for( i=1; i<=64; i+= 8 )
      {
            str += String.fromCharCode(
                        DES_output[i  ]*128 + DES_output[i+1]*64  +
                        DES_output[i+2]*32  + DES_output[i+3]*16  +
                        DES_output[i+4]*8   + DES_output[i+5]*4   +
                        DES_output[i+6]*2   + DES_output[i+7] );
      }
   }
   else 
   {
      // output hexdecimal data
      for( i=1; i<=64; i+= 4 )
      {
            bits = DES_output[i  ]*8   + DES_output[i+1]*4   +
                   DES_output[i+2]*2   + DES_output[i+3];

            // 0-9 or A-F?
            if ( bits <= 9 )
               str += String.fromCharCode( bits+48 );
            else
               str += String.fromCharCode( bits+87 );
      }
   }

   // copy to textbox
   return str;
} //end function

// copy bits in a permutation
//   dest = where to copy the bits to
//   src  = Where to copy the bits from
//   perm = The order to copy/permute the bits
// note: since DES ingores x[0], we do also
function permute( dest, src, perm )
{
  var i;
  var fromloc;

  for( i=1; i<perm.length; i++ )
  {
    fromloc = perm[i];
    dest[i] = src[fromloc];
  }
} //end function

// do an array XOR
// assume all array entries are 0 or 1
function xor( a1, a2 )
{
   var i;

   for( i=1; i<a1.length; i++ )
      a1[i] = a1[i] ^ a2[i];
} //end function

// process one S-Box, return integer from S-Box
function do_S( SBox, index, inbits )
{
   // collect the 6 bits into a single integer
   var S_index = inbits[index  ]*32 + inbits[index+5]*16 +
                 inbits[index+1]*8  + inbits[index+2]*4 +
                 inbits[index+3]*2  + inbits[index+4];

   // do lookup
   return SBox[S_index];
} //end function

// do one round of DES encryption
function des_round( L, R, KeyR )
{
   var E_result = new Array( 49 );
   var S_out = new Array( 33 );

   // copy the existing L bits, then set new L = old R
   var temp_L = new Array( 33 );
   for( i=0; i<33; i++ )
   {
      // copy exising L bits
      temp_L[i] = L[i];

      // set L = R
      L[i] = R[i];
   }

   // expand R using E permutation
   permute( E_result, R, E_perm );

   // exclusive-or with current key
   xor( E_result, KeyR );

   // put through the S-Boxes
   split_int( S_out,  1, 4, do_S( S1,  1, E_result ) );
   split_int( S_out,  5, 4, do_S( S2,  7, E_result ) );
   split_int( S_out,  9, 4, do_S( S3, 13, E_result ) );
   split_int( S_out, 13, 4, do_S( S4, 19, E_result ) );
   split_int( S_out, 17, 4, do_S( S5, 25, E_result ) );
   split_int( S_out, 21, 4, do_S( S6, 31, E_result ) );
   split_int( S_out, 25, 4, do_S( S7, 37, E_result ) );
   split_int( S_out, 29, 4, do_S( S8, 43, E_result ) );

   // do the P permutation
   permute( R, S_out, P_perm );

   // xor this with old L to get the new R
   xor( R, temp_L );
} //end function

// shift the CD values left 1 bit
function shift_CD_1( CD )
{
   var i;

   // note we use [0] to hold the bit shifted around the end
   for( i=0; i<=55; i++ )
      CD[i] = CD[i+1];

   // shift D bit around end
   CD[56] = CD[28];
   // shift C bit around end
   CD[28] = CD[0];
} //end function

// shift the CD values left 2 bits
function shift_CD_2( CD )
{
   var i;
   var C1 = CD[1];

   // note we use [0] to hold the bit shifted around the end
   for( i=0; i<=54; i++ )
      CD[i] = CD[i+2];

   // shift D bits around end
   CD[55] = CD[27];
   CD[56] = CD[28];
   // shift C bits around end
   CD[27] = C1;
   CD[28] = CD[0];
} //end function

// do the actual DES encryption/decryption
function des_encrypt( inData, Key, do_encrypt )
{
   var tempData = new Array( 65 );	// output bits
   var CD = new Array( 57 );		// halves of current key
   var KS = new Array( 16 );		// per-round key schedules
   var L = new Array( 33 );		// left half of current data
   var R = new Array( 33 );		// right half of current data
   var result = new Array( 65 );	// DES output
   var i;

   // do the initial key permutation
   permute( CD, Key, PC_1_perm );

   // create the subkeys
   for( i=1; i<=16; i++ )
   {
      // create a new array for each round
      KS[i] = new Array( 49 );

      // how much should we shift C and D?
      if ( i==1 || i==2 || i==9 || i == 16 )
         shift_CD_1( CD );
      else
         shift_CD_2( CD );

      // create the actual subkey
      permute( KS[i], CD, PC_2_perm );
   }

   // handle the initial permutation
   permute( tempData, inData, IP_perm );

   // split data into L/R parts
   for( i=1; i<=32; i++ )
   {
      L[i] = tempData[i];
      R[i] = tempData[i+32];
   }

   // encrypting or decrypting?
   if ( do_encrypt )
   {
      // encrypting
      for( i=1; i<=16; i++ )
      {
         des_round( L, R, KS[i] );
      }
   }
   else
   {
      // decrypting
      for( i=16; i>=1; i-- )
      {
         des_round( L, R, KS[i] );
      }
   }

   // create the 64-bit preoutput block = R16/L16
   for( i=1; i<=32; i++ )
   {
      // copy R bits into left half of block, L bits into right half
      tempData[i] = R[i];
      tempData[i+32] = L[i];
   }

   // do final permutation and return result
   permute( result, tempData, FP_perm );
   return result;
} //end function

// do encrytion/decryption
// do_encrypt is TRUE for encrypt, FALSE for decrypt
function do_des( do_encrypt ,inputDataValue_asString, inputType_asBoolean, cle1Value_asString, outputType_asBoolean)
{
   var inData = new Array( 65 );	// input message bits
   var Key = new Array( 65 );

   // get the message from the user
   // also check if it is ASCII or hex
   get_value( inData, inputDataValue_asString,
		inputType_asBoolean );

   // problems??
   if ( inData[0] == ERROR_VAL )
   {
      alert("Il y a un probleme");
      return;
   }

   // get the key from the user
   get_value( Key, cle1Value_asString, false );
   // problems??
   if ( Key[0] == ERROR_VAL )
   {
      alert("Il y a un probleme");
      return;
   }

   // do the encryption/decryption, put output in DES_output for display
   DES_output = des_encrypt( inData, Key, do_encrypt )

   accumulate_bitstring ("Output ", DES_output, 8 );

   // process output
   return format_DES_output(outputType_asBoolean);
} //end function

// do Triple-DES encrytion/decryption
// do_encrypt is TRUE for encrypt, FALSE for decrypt
function do_tdes( do_encrypt , inputDataValue_asString , inputType_asBoolean, cle1Value_asString, cle2Value_asString, outputType_asBoolean)
{

   var inData = new Array( 65 );	// input message bits
   var tempdata = new Array( 65 );	// interm result bits
   var KeyA = new Array( 65 );
   var KeyB = new Array( 65 );

   accumulated_output_info = "";

   // get the message from the user
   // also check if it is ASCII or hex
   get_value( inData, inputDataValue_asString, inputType_asBoolean );

   // problems??
   if ( inData[0] == ERROR_VAL )
   {
      alert("Il y a un probleme");
      return;
   }

   // get the key part A from the user
   get_value( KeyA, cle1Value_asString, false );
   // problems??
   if ( KeyA[0] == ERROR_VAL )
   {
      alert("Il y a un probleme");
      return;
   }

   // get the key part B from the user
   get_value( KeyB, cle2Value_asString, false );
   // problems??
   if ( KeyB[0] == ERROR_VAL )
   {
      alert("Il y a un probleme");
      return;
   }

   if ( do_encrypt )
   {
      // TDES encrypt = DES encrypt/decrypt/encrypt
//---- 1st step: Starting first encryption ----
      tempdata = des_encrypt( inData, KeyA, true );
//---- 2nd step: Starting first decryption ----
      tempdata = des_encrypt( tempdata, KeyB, false );
//---- 3rd step: Starting second encryption ----
      DES_output = des_encrypt( tempdata, KeyA, true );
   }
   else
   {
      // TDES decrypt = DES decrypt/encrypt/decrypt
//---- 1st step: Starting first decryption ----
      tempdata = des_encrypt( inData, KeyA, false );
//---- 2nd step: Starting first encryption ----
      tempdata = des_encrypt( tempdata, KeyB, true );
//---- 3rd step: Starting second decryption ----
      DES_output = des_encrypt( tempdata, KeyA, false );
   }

   // process output
   return format_DES_output(outputType_asBoolean);
} //end function

//=========================
//=> GenererCVC_TDES.txt <=
//=========================
function genererCVC_TDES(index_asNumber,numeroCarte_asString,cle1_asString,cle2_asString)
{
var index = index_asNumber;

var strCarte = numeroCarte_asString;
var strCle1 = cle1_asString;
var strCle2 = cle2_asString;

var taille = Number(extraire(lcartes,index,6,"¬"));

//do_tdes( do_encrypt , inputDataValue_asString , inputType_asBoolean, cle1Value_asString, cle2Value_asString, outputType_asBoolean);
var encrypter = true;
var typeNumero = false; //le numero de carte est considere comme etant en hexadecimal
var resultatType = false; //on veut le resultat egalement en hexadecimal

var strCVC = do_tdes(encrypter,numeroCarte_asString,typeNumero,cle1_asString,cle2_asString,resultatType);

strCVC = strCVC.substr(0,taille);

strCVC = strCVC.replace(/a/ig,"0");
strCVC = strCVC.replace(/b/ig,"1");
strCVC = strCVC.replace(/c/ig,"2");
strCVC = strCVC.replace(/d/ig,"3");
strCVC = strCVC.replace(/e/ig,"4");
strCVC = strCVC.replace(/f/ig,"5");

return strCVC;
} //end function

//=====================
//=> GenererDate.txt <=
//=====================
function genererDate(index_asNumber)
{
var index = index_asNumber;

var strChiffres = "0123456789";
var nbMois = Number(extraire(lcartes,index,5,"¬"));

var today = new Date();
var annee = today.getFullYear();
var mois = today.getMonth()+1;

var aleatoire = Math.floor(nbMois*Math.random());

var newMois = mois + aleatoire;
while (newMois > 12)
{
newMois = newMois - 12;
annee++;
} //end while

if (newMois<10)
{
var strDate = "0"+ newMois + "/" + annee;
}
else
{
var strDate = newMois + "/" + annee;
}

return strDate;
} //end function

//==========================
//=> GenererTitulaire.txt <=
//==========================
function genererTitulaire(index_asNumber,taillePrenom_asNumber,nationalite_asString)
{
var index = index_asNumber;
var PrenomComplet = taillePrenom_asNumber;

if (nationalite_asString == "")
{
var strNation = extraire(lcartes,index,7,"¬");
}
else
{
var strNation = nationalite_asString;
}

var lindexNoms = new Array();
var lcptNoms = new Array();
var cpt = 0;
for(i=0;i<lnoms.length;i++)
{
	if (lnoms[i].substr(0,2) == strNation)
	{
	lindexNoms[cpt] = i;
	var str1= lnoms[i];
	var a = str1.indexOf("¬");
	var cptNoms = 0;
	while (a>0)
	{
		str1 = str1.substring(a+1,str1.length);
		a = str1.indexOf("¬");
		cptNoms++;
	} //end while
	lcptNoms[cpt] = cptNoms;
	cpt++;
	}
} //end for i

var lindexPrenomsM = new Array();
var lcptPrenomsM = new Array();
var cpt = 0;
for(i=0;i<lprenoms.length;i++)
{
	if (lprenoms[i].substr(0,2) == strNation)
	{
if (lprenoms[i].substr(3,1) == "M")
{
	lindexPrenomsM[cpt] = i;
	var str1= lprenoms[i];
	var a = str1.indexOf("¬");
	var cptPrenoms = 0;
	while (a>0)
	{
		str1 = str1.substring(a+1,str1.length);
		a = str1.indexOf("¬");
		cptPrenoms++;
	} //end while
	lcptPrenomsM[cpt] = cptPrenoms;
	cpt++;
	}
} //end if then
} //end for i

var lindexPrenomsF = new Array();
var lcptPrenomsF = new Array();
var cpt = 0;
for(i=0;i<lprenoms.length;i++)
{
	if (lprenoms[i].substr(0,2) == strNation)
	{
if (lprenoms[i].substr(3,1) == "F")
{
	lindexPrenomsF[cpt] = i;
	var str1= lprenoms[i];
	var a = str1.indexOf("¬");
	var cptPrenoms = 0;
	while (a>0)
	{
		str1 = str1.substring(a+1,str1.length);
		a = str1.indexOf("¬");
		cptPrenoms++;
	} //end while
	lcptPrenomsF[cpt] = cptPrenoms;
	cpt++;
	}
} //end if then
} //end for i

var aleaindex = Math.floor(lindexNoms.length * Math.random());
var aleaNoms = Math.floor(lcptNoms[aleaindex] * Math.random());
var strNom = extraire(lnoms,lindexNoms[aleaindex],aleaNoms,"¬");
//___On retire l'indicatif du pays qui est en debut de chaine.  Par exemple: "US_"
if (aleaNoms==0)
{
strNom = strNom.substring(3,strNom.length);
} //end if then

var aleaPrenomsMF = Math.floor(2 * Math.random());
if (aleaPrenomsMF == 0)
{
var aleaindex = Math.floor(lindexPrenomsM.length * Math.random());
var aleaPrenoms = Math.floor(lcptPrenomsM[aleaindex] * Math.random());
var strPrenom = extraire(lprenoms,lindexPrenomsM[aleaindex],aleaPrenoms,"¬");
var ltitres = new Array("MR");
}
else
{
var aleaindex = Math.floor(lindexPrenomsF.length * Math.random());
var aleaPrenoms = Math.floor(lcptPrenomsF[aleaindex] * Math.random());
var strPrenom = extraire(lprenoms,lindexPrenomsF[aleaindex],aleaPrenoms,"¬");
var ltitres = new Array("MRS","MSS");
} //end if else

if (aleaPrenoms==0)
{
//___On retire l'indicatif du pays et le genre qui sont en debut de chaine.  Par exemple: "US-M_"
strPrenom = strPrenom.substring(5,strPrenom.length);
} //end if then

if (PrenomComplet==false)
{
//__On affiche que l'initiale du prenom (la premiere lettre)__
strPrenom = strPrenom.substr(0,1);
}
else
{
//__On affiche le prenom au complet__
// strPrenom ne change pas
} //end if else

var aleaTitre = Math.floor(ltitres.length * Math.random());
var strTitre = ltitres[aleaTitre];

var strTitulaire = strTitre +" "+ strPrenom +" "+ strNom;
strTitulaire = strTitulaire.toUpperCase();

return strTitulaire;

} //end function

//=========================
//=> TrouverDoublons.txt <=
//=========================

//Source: Excel VBA Script
function TrouverDoublons(numero_asString,longueurDoublon_asNumber)
{
var str0 = numero_asString;
var a = longueurDoublon_asNumber;
var n = str0.length;

var l1 = new Array();
var c = 0 ;
var d = 0 ;
var s = 0 ;

if (n < 2)
{
return false;
}
else
{   
l1 = new Array(n);
for(i=1;i<=n;i++)
{
l1[i-1] = eval(str0.substr(i,1));
} //end for i
var tot = 0;
for(i=1;i<=(n-a);i++)
{
	if (l1[i] == l1[i+1])
	{
	s = 1;
	}
	else
	{
	s = 0;
	} //end if else
	for(j=2;j<=(a-1);j++)
	{
		if (l1[i] == l1[i+j] && s > 0)
		{
		s++;
		}
		else
		{
		// Rien
		} //end if else
	} // end for j
	if (s == (a-1))
	{
	return true;
	break;
	}
	else
	{
	tot = tot+s;
	} //end if else
} //end for i
if (tot > a)
{
return true;
}
else
{
return false;
} //end if else

} //end if else n<2

} //end function

//=======================
//=> TrouverSuites.txt <=
//=======================
function TrouverSuites(numero_asString,longueurSuite_asNumber)
{
var str0 = numero_asString;
var a = longueurSuite_asNumber;
var l1 = new Array();
var n = str0.length;
var c = 0 ;
var d = 0;
var s = 0 ;

if (a <= 1)
{
return true;
}
else
{
s = 0;
if (a == 2)
{
for(b=2;b<=n;b++)
{
var c = eval(str0.substr(b-1,1));
var d = eval(str0.substr(b,1));
if ((c - d) == 1 || (c - d) == -1)
{
s++;
}
else
{
//Rien
} //end if
} //end for b
if (s > 0)
{
return true;
}
else
{
return false;
} //end if else
}
else
{
l1 = new Array(n-1);
c = eval(str0.substr(1,1));
d = eval(str0.substr(2,1));
l1[0] = c-d;
for(b=3;b<=n;b++)
{
c = eval(str0.substr(b-1,1));
d = eval(str0.substr(b,1));
l1[b-2] = c-d;
if (l1[b-2] == l1[b-3])
{
if (l1[b-2] == 1 || l1[b-2] == -1)
{
s++;
}
else
{
//Rien
} //end if else
}
else
{
//Rien
} //end if else
} //end for b
if ((s+2) >= a)
{
return true;
}
else
{
return false;
} //end if else
} //end if else a=2
} //end if else a<=1

} //End function

//===============================================================================================================
//=> La fonction permet de generer des numeros de cartes suivant les options selectionnees et le modele choisi <=
//===============================================================================================================
function generer()
{

//####################
//#_____PARTIE I_____#
//####################
//_____On initialise les parametres de la fonction_____

//_____On recupere l'index selectionne dans la liste des modeles de cartes disponibles_____
var index = document.getElementById("SelectCarteModele").selectedIndex;

//_____Initialisation des variables_____
var lnumero = new Array();
var lcvc = new Array();
var ldate = new Array();
var ltitulaire = new Array();

//_____On recupere la liste de verification des options_____
var lverif = verifier();
//__[0] = nb de numeros a generer; 1 par defaut
//__[1] = numero de carte fixe; "Generer" par defaut
//__[2] = cvc; "Generer" par defaut
//__[3] = date; "Generer" par defaut
//__[4] = nom du titulaire; "Generer" par defaut
//__[5] = doublons carte; 0 par defaut
//__[6] = suites carte; 0 par defaut
//__[7] = doublons cvc; 0 par defaut
//__[8] = suites cvc; 0 par defaut
//__[9] = Afficher Prenom Complet; false par defaut
//__[10] = CVC a partir de 2 cles via T-DES; false par defaut
//__[11] = Afficher les resultats dans une zone de texte; false par defaut
//__[12] = Fixer la nationalite du titulaire; "Generer" par defaut
var nbCB = lverif[0];
var strCarte = lverif[1];
var strCVC = lverif[2];
var strDate = lverif[3];
var strTitulaire = lverif[4];
var doublonsCarte = lverif[5];
var suitesCarte = lverif[6];
var doublonsCVC = lverif[7];
var suitesCVC = lverif[8];
var PrenomComplet = lverif[9];
var CVCviaTDES = lverif[10];
var afficherZoneTexte = lverif[11];
var strNation = lverif[12];

//#####################
//#_____PARTIE II_____#
//#####################
//_____On genere les nbCB numeros de carte requis_____
for(cpt=0;cpt<nbCB;cpt++)
{

//###########################
//#_____Numero de carte_____#
//###########################
if (strCarte=="Generer")
{
	//___Generer le numero de carte___
	lnumero[cpt] = genererCarte(index);

	//___Option Doublons___
	if (doublonsCarte==0)
	{
	//___Ignorer les doublons___

		//___Option Suites___
		if (suitesCarte==0)
		{
		//___Ignorer les Suites___
		}
		else
		{
		//___Supprimer les Suites___
			var strPrefixe = extraire(lcartes,index,3,"¬");
			if (TrouverSuites(strPrefixe,suitesCarte)==true)
			{
			//_Le prefixe de la carte contient une suite interdite, on retire le prefixe dans l'evaluation_
				var str1 = lnumero[cpt];
				var str2 = str1.substring(strPrefixe.length,str1.length);
				while (TrouverSuites(str2,suitesCarte)==true)
				{
				str1 = genererCarte(index);
				str2 = str1.substring(strPrefixe.length,str1.length);
				} //end while
				lnumero[cpt] = str1;
			}
			else
			{
				while (TrouverSuites(lnumero[cpt],suitesCarte)==true)
				{lnumero[cpt] = genererCarte(index);}
			} //end if else
		} //end if else _suites_
	} //end if then _doublons_
	else
	{
	//___Supprimer les Doublons___

		//___Option Suites___
		if (suitesCarte==0)
		{
		//___Ignorer les Suites, mais Supprimer les Doublons___
			var strPrefixe = extraire(lcartes,index,3,"¬");
			if (TrouverDoublons(strPrefixe,doublonsCarte)==true)
			{
			//_Le prefixe de la carte contient un doublon interdit, on retire le prefixe de l'evaluation_
				var str1 = lnumero[cpt];
				var str2 = str1.substring(strPrefixe.length,str1.length);
				while (TrouverDoublons(str2,doublonsCarte)==true)
				{
				str1 = genererCarte(index);
				str2 = str1.substring(strPrefixe.length,str1.length);
				} //end while
				lnumero[cpt] = str1;
			}
			else
			{
				while (TrouverDoublons(lnumero[cpt],doublonsCarte)==true)
				{lnumero[cpt] = genererCarte(index);}
			} //end if else
		} //end if then _suites_
		else
		{
		//___Supprimer les Suites & les Doublons___
			var strPrefixe = extraire(lcartes,index,3,"¬");
			if (TrouverSuites(strPrefixe,suitesCarte)==true || TrouverDoublons(strPrefixe,doublonsCarte)==true)
			{
			//_Le prefixe de la carte contient soit un doublon interdit soit une suite interdite, on ne peut rien faire_
				if (TrouverDoublons(strPrefixe,doublonsCarte)==true)
				{
				//_Le prefixe de la carte contient un doublon interdit, on retire le prefixe de l'evaluation_
					var str1 = lnumero[cpt];
					var str2 = str1.substring(strPrefixe.length,str1.length);
					while (TrouverSuites(str1,suitesCarte)==true && TrouverDoublons(str2,doublonsCarte)==true)
					{
					str1 = genererCarte(index);
					str2 = str1.substring(strPrefixe.length,str1.length);
					} //end while
					lnumero[cpt] = str1;
				} //end if then
				else
				{
				//_Le prefixe de la carte contient une suite interdite, on retire le prefixe de l'evaluation_
					var str1 = lnumero[cpt];
					var str2 = str1.substring(strPrefixe.length,str1.length);
					while (TrouverSuites(str2,suitesCarte)==true && TrouverDoublons(str1,doublonsCarte)==true)
					{
					str1 = genererCarte(index);
					str2 = str1.substring(strPrefixe.length,str1.length);
					} //end while
					lnumero[cpt] = str1;
				} //end if else
			} //end if then
			else
			{
				while (TrouverSuites(lnumero[cpt],suitesCarte)==true && TrouverDoublons(lnumero[cpt],doublonsCarte)==true)
				{lnumero[cpt] = genererCarte(index);}
			} //end if else
		} //end if else _suites_
	} //end if else _doublons_
}
else
{
	//__Numero de carte deja defini___
	lnumero[cpt] = strCarte;
} //end if else

//################
//#_____Date_____#
//################
if (strDate=="Generer")
{
//___Generer la date___
ldate[cpt] = genererDate(index);
}
else
{
//__Date deja definie___
ldate[cpt] = strDate;
} //end if else

//####################################
//#_____Numero de controle (CVC)_____#
//####################################
if (strCVC=="Generer")
{

//CVCviaTDES
if (CVCviaTDES == true)
{
var strCle1 = document.getElementById("DEScle1").value;
var strCle2 = document.getElementById("DEScle2").value;
var strCodeService = document.getElementById("CVCcodeService").value;

if (document.getElementById("CheckBoxCVCDateMMAA").checked==false && document.getElementById("CheckBoxCVCDateMMAA").checked==false)
{
//_On choisit au hasard le format de la date_

}
else
{
	if (document.getElementById("CheckBoxCVCDateMMAA").checked==true && document.getElementById("CheckBoxCVCDateMMAA").checked==false)
	{
	//_Format MMAA seulement_
	var strInputTDES = lnumero[cpt].substring(6,(lnumero[cpt].length-1));
	strInputTDES += ldate[cpt].substring(0,2); //MM
	strInputTDES += ldate[cpt].substring(5,7); //AA
	strInputTDES += strCodeService;
	lcvc[cpt] = genererCVC_TDES(index,strInputTDES,strCle1,strCle2);
	}
	else
	{
		if (document.getElementById("CheckBoxCVCDateMMAA").checked==false && document.getElementById("CheckBoxCVCDateMMAA").checked==true)
		{
		//_Format AAMM seulement_
		var strInputTDES = lnumero[cpt].substring(6,(lnumero[cpt].length-1));
		strInputTDES += ldate[cpt].substring(5,7); //AA
		strInputTDES += ldate[cpt].substring(0,2); //MM
		strInputTDES += strCodeService;
		lcvc[cpt] = genererCVC_TDES(index,strInputTDES,strCle1,strCle2);
		}
		else
		{
		//_Formats MMAA et AAMM_
		var strInputTDES = lnumero[cpt].substring(6,(lnumero[cpt].length-1));
		strInputTDES += ldate[cpt].substring(0,2); //MM
		strInputTDES += ldate[cpt].substring(5,7); //AA
		strInputTDES += strCodeService;
		lcvc[cpt] = genererCVC_TDES(index,strInputTDES,strCle1,strCle2);
		var strInputTDES = lnumero[cpt].substring(6,(lnumero[cpt].length-1));
		strInputTDES += ldate[cpt].substring(5,7); //AA
		strInputTDES += ldate[cpt].substring(0,2); //MM
		strInputTDES += strCodeService;
		lcvc[cpt] += " "+ genererCVC_TDES(index,strInputTDES,strCle1,strCle2);
		} //end if else
	} //end if else
} //end if else

}
else
{
	//___Generer le numero de controle (CVC)___
	lcvc[cpt] = genererCVC_random(index);

	//___Option Doublons___
	if (doublonsCVC==0)
	{
	//___Ignorer les doublons___
		//___Option Suites___
		if (suitesCVC==0)
		{
		//___Ignorer les Suites___
		}
		else
		{
		//___Supprimer les Suites___
		while (TrouverSuites(lcvc[cpt],suitesCVC)==true)
		{lcvc[cpt] = genererCVC_random(index);}
		} //end if else _suites_
	} //end if then _doublons_
	else
	{
	//___Supprimer les Doublons___
		//___Option Suites___
		if (suitesCVC==0)
		{
		//___Ignorer les Suites, mais Supprimer les Doublons___
		while (TrouverDoublons(lcvc[cpt],doublonsCVC)==true)
		{lcvc[cpt] = genererCVC_random(index);}
		}
		else
		{
		//___Supprimer les Suites & les Doublons___
		while (TrouverSuites(lcvc[cpt],suitesCVC)==true && TrouverDoublons(lcvc[cpt],doublonsCVC)==true)
		{lcvc[cpt] = genererCVC_random(index);}
		} //end if else _suites_
	} //end if else _doublons_

} //end if else _CVCviaTDES_

}
else
{
	//__Numero de controle (CVC) deja defini___
	lcvc[cpt] = strCVC;

} //end if else strCVC

//############################
//#_____Nom du titulaire_____#
//############################
if (strTitulaire=="Generer")
{
//___Generer le nom du titulaire___
	if (strNation=="Generer")
	{
	//___Utiliser la nationalite du titulaire correspondante au modele de carte selectionne___
	ltitulaire[cpt] = genererTitulaire(index,PrenomComplet,"");
	}
	else
	{
	//___Utiliser la nationalite du titulaire definie___
	ltitulaire[cpt] = genererTitulaire(index,PrenomComplet,strNation);
	} //end if else
}
else
{
//__Nom du titulaire deja defini___
ltitulaire[cpt] = strTitulaire;
} //end if else

} //end for cpt

//######################
//#_____PARTIE III_____#
//######################

var strResultats = "";

if (afficherZoneTexte == true)
{
//____Affichage des resultats dans une zone de texte (textarea)____

//__Debut de la Zone de Texte__
strResultats += "<textarea cols=70 rows="+ (nbCB+1) +">";

//__1ere ligne__
	//__1ere colonne__
	strResultats += "&nbsp;N°";
	var a = nbCB;
	while (a > 99)
	{
	strResultats += "&nbsp;";
	a = Math.floor(a/10);
	}

	//__2eme colonne__
	strResultats += "&nbsp;Numéro de la carte";
	var a = lnumero[0].length;
	while (a > 18)
	{
	strResultats += "&nbsp;";
	a = a-1;
	}

	//__3eme colonne__
	strResultats += "&nbsp;CVC";
	var a = lcvc[0].length;
	while (a > 3)
	{
	strResultats += "&nbsp;";
	a = a-1;
	}

	//__4eme colonne__
	strResultats += "&nbsp;Date de validité";

	//__5eme colonne__
	strResultats += "&nbsp;Nom du titulaire";

	strResultats += "\n";

//__Lignes suivantes__
for(i=0;i<nbCB;i++)
{
//__ieme ligne__
	//__1ere colonne__
	strResultats += "&nbsp;";
	strResultats += (i+1);
	var a = (i+1);
	while (a < nbCB)
	{
	strResultats += "&nbsp;";	
	a = a*10;
	}

	//__2eme colonne__
	strResultats += "&nbsp;";
	strResultats += lnumero[i];
	var a = lnumero[i].length;
	while (a < 18)
	{
	strResultats += "&nbsp;";	
	a = a+1;
	}

	//__3eme colonne__
	strResultats += "&nbsp;";
	strResultats += lcvc[i];

	//__4eme colonne__
	strResultats += "&nbsp;";
	strResultats += ldate[i];
	var a = ldate[i].length;
	while (a < 16)
	{
	strResultats += "&nbsp;";	
	a = a+1;
	}

	//__5eme colonne__
	strResultats += "&nbsp;";
	strResultats += ltitulaire[i];

	strResultats += "\n";

} //end for i

//__Fin de la Zone de Texte__
strResultats += "</textarea>";

}
else
{

//_____Creation d'un tableau qui va accueillir les resultats_____
//Numéro de la carte | CVC | Date limite de validité | Nom du titulaire |

//__Debut du tableau__
strResultats += "<table border = '1'>";

//__1ere ligne__
strResultats += "<tr>";
	//__1ere colonne__
	strResultats += "<th>";
	strResultats += "N°";
	strResultats += "</th>";
	//__2eme colonne__
	strResultats += "<th>";
	strResultats += "Numéro de la carte";
	strResultats += "</th>";
	//__3eme colonne__
	strResultats += "<th>";
	strResultats += "CVC";
	strResultats += "</th>";
	//__4eme colonne__
	strResultats += "<th>";
	strResultats += "Date de validité";
	strResultats += "</th>";
	//__5eme colonne__
	strResultats += "<th>";
	strResultats += "Nom du titulaire";
	strResultats += "</th>";
strResultats += "</tr>";

for(i=0;i<nbCB;i++)
{
//__ieme ligne__
strResultats += "<tr>";
	//__1ere colonne__
	strResultats += "<td>&nbsp;";
	strResultats += (i+1);
	strResultats += "&nbsp;</td>";
	//__2eme colonne__
	strResultats += "<td>&nbsp;";
	strResultats += lnumero[i];
	strResultats += "&nbsp;</td>";
	//__3eme colonne__
	strResultats += "<td>&nbsp;";
	strResultats += lcvc[i];
	strResultats += "&nbsp;</td>";
	//__4eme colonne__
	strResultats += "<td>&nbsp;";
	strResultats += ldate[i];
	strResultats += "&nbsp;</td>";
	//__5eme colonne__
	strResultats += "<td>&nbsp;";
	strResultats += ltitulaire[i];
	strResultats += "&nbsp;</td>";
strResultats += "</tr>";
} //end for i

//__Fin du tableau__
strResultats += "</table>";

} //end if else

//_____Affichage des resultats dans la page HTML_____
document.getElementById("Resultats").innerHTML = strResultats;

} //end function

function afficheId(baliseId)
{
if (document.getElementById && document.getElementById(baliseId) != null)
{
document.getElementById(baliseId).style.visibility='visible';
document.getElementById(baliseId).style.display='block';
} //end if then
} //end function

function cacheId(baliseId)
{
if (document.getElementById && document.getElementById(baliseId) != null)
{
document.getElementById(baliseId).style.visibility='hidden';
document.getElementById(baliseId).style.display='none';
} //end if then
} //end function

function AfficherNation()
{
var index = document.getElementById("SelectCarteModele").selectedIndex;
var strNation = extraire(lcartes,index,7,"¬");
document.getElementById("ModeleNation").innerHTML = "Nationalité des noms associée à ce modèle de carte : "+ strNation;
} //end function
</script>

</HEAD>

<BODY onload="chargement();afficheId('AfficherOptions');cacheId('MasquerOptions');">

<noscript>Merci d'autorisez JavaScript afin de pouvoir utiliser cette page correctement.</noscript>

<h2>Générateur libre de numéros de cartes bancaires</h2>

<h3>Sélectionnez un modèle de carte bancaire :</h3>
<div id="CarteModele">
Veuillez patienter pendant le chargement de la liste...
</div>
<div id="ModeleNation">
</div>

<div id="AfficherOptions">
<a href="javascript:afficheId('MasquerOptions');cacheId('AfficherOptions');">Afficher les options</a>
</div>

<div id="MasquerOptions">
<a href="javascript:afficheId('AfficherOptions');cacheId('MasquerOptions');">Masquer les options</a>
<br>
<h3>Cochez les options que vous souhaitez considérer pour la génération :</h3>

<!------------------------
   1) Options Générales
------------------------->
<h4>1) Options Générales</h4>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxNbCB">
Nombre de numéros de carte à générer :
 <input type="text" id="NbCB" size=3 value="10" onchange="javascript:document.getElementById('CheckBoxNbCB').checked=true;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, un seul numéro est généré.
<br>

<!----------------------------------
  2) Options pour Numéro de Carte
----------------------------------->
<br>
<h4>2) Options Concernant la Génération du Numéro de Carte</h4>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxFixerCarte">
Fixer le numéro de la carte :
 <input type="text" id="FixerCarte" size=20 value="" onchange="javascript:document.getElementById('CheckBoxFixerCarte').checked=true;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, le numéro de la carte est généré aléatoirement en se basant sur les critères définis (préfixe, taille et Clé de Luhn) pour le modèle de carte sélectionné.
<br>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxDoublonsCarte">
Interdire les doublons de plus de
 <input type="text" id="DoublonsCarte" size=1 value="3">
 chiffres dans le numero de la carte.
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, les doublons de toute taille sont autorisés.
<br>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxSuitesCarte">
Interdire les suites de plus de
 <input type="text" id="SuitesCarte" size=1 value="3">
 chiffres dans le numero de la carte.
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, les suites de toute taille sont autoriseés.
<br>

<!-------------------------------------
  3) Options pour Numéro de Contrôle
-------------------------------------->
<br>
<h4>3) Options Concernant la Génération du Numéro de Contrôle</h4>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxFixerCVC">
Fixer le numéro de contrôle de la carte :
 <input type="text" id="FixerCVC" size=4 value="" onchange="javascript:document.getElementById('CheckBoxFixerCVC').checked=true;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, le numéro de contrôle est généré aléatoirement en se basant sur la taille définie pour le modèle de carte sélectionné.
<br>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxDoublonsCVC">
Interdire les doublons de plus de
 <input type="text" id="DoublonsCVC" size=1 value="2">
 chiffres dans le numero de controle (CVC).
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, les doublons de toute taille sont autorisés.
<br>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxSuitesCVC">
Interdire les suites de plus de
 <input type="text" id="SuitesCVC" size=1 value="3">
 chiffres dans le numero de controle (CVC).
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, les suites de toute taille sont autoriseés.
<br>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxDESCVC">
Generer le numero de controle en definissant les parametres suivant :
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- Le numero de compte primaire est defini pour le numero de carte genere.  Il est compose du numero de carte auquel est retire les 6 premiers nombres (prefixe de la banque) et le dernier chiffre (cle de Luhn).
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- La date de validite est definie par celle generee dans la plage definie pour le modele de carte selectionne.  Selectionnez sous quelle forme l'utiliser :
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" id="CheckBoxCVCDateMMAA" checked> MMAA
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" id="CheckBoxCVCDateAAMM"> AAMM
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Si vous cochez les 2 options, les 2 valeurs seront affichees dans le resultat
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- Un code service a 3 chiffres : <input type="text" id="CVCcodeService" size=3 value="000" onchange="javascript:document.getElementById('CheckBoxDESCVC').checked=true">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- Cle 1 : <input type="text" id="DEScle1" size=20 value="0123456789ABCDEF" onchange="javascript:document.getElementById('CheckBoxDESCVC').checked=true">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- Cle 2 : <input type="text" id="DEScle2" size=20 value="0123456789ABCDEF" onchange="javascript:document.getElementById('CheckBoxDESCVC').checked=true">
<br>

<!-----------------------------------
  4) Options pour Date de Validité
------------------------------------>
<br>
<h4>4) Options Concernant la Génération de la Date de Validité</h4>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxFixerDate">
Fixer la date limite de validité de la carte :
<SCRIPT>
document.write('<select id="mois" onchange="javascript:document.getElementById(');
document.write("'CheckBoxFixerDate'");
document.write(').checked=true;">');
for(i=1;i<=12;i++)
{
if(i<10)
{
document.write('<option value="0'+ i +'">0'+ i +'</option>');
}
else
{
document.write('<option value="'+ i +'">'+ i +'</option>');
}
}
document.write('</select>');
document.write(' / ');
document.write('<select id="annee" onchange="javascript:document.getElementById(');
document.write("'CheckBoxFixerDate'");
document.write(').checked=true;">');
var d0 = new Date();
var d1 = d0.getFullYear();
var d2 = d1 + 3;
for(i=d1;i<d2;i++)
{
document.write('<option value="'+ i +'">'+ i +'</option>');
}
document.write('</select>');
</SCRIPT>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, la date est générée aléatoirement en se basant sur la période définie pour le modèle de carte sélectionné.
<br>

<!-----------------------------------
  5) Options pour Nom du Titulaire
------------------------------------>
<br>
<h4>5) Options Concernant la Génération du Nom du Titulaire</h4>
<div id="Nations"></div>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxPrenomComplet">
Afficher le prenom complet du titulaire
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, seule l'initiale du prenom du titulaire (la 1ere lettre) est affichée en se basant sur la liste de prenoms définie pour le modèle de carte sélectionné.
<br>

<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxFixerNom">
Fixer le nom du titulaire :
 <input type="text" id="FixerNom" size=20 value="" onchange="javascript:document.getElementById('CheckBoxFixerNom').checked=true;">
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, le nom du titulaire est généré aléatoirement en se basant sur la liste définie pour le modèle de carte sélectionné.
<br>

<!--------------------------------------------
  6) Options pour l'Affichage des Resultats
--------------------------------------------->
<br>
<h4>6) Options Concernant l'Affichage des Résultats</h4>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="CheckBoxTypeAffichage">
Afficher les résultats dans une zone de texte (textarea)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Par défaut, les résultats sont affichés dans un tableau.
<br>

</div>

<br>
<input type="button" value="Cliquer ici pour Générer les numéros" onclick="javascript:generer();">
<br>

<h4>Résultat de la génération des numéros :</h4>
<div id="Infos">
</div>
<br>
<div id="Resultats">
Aucun résultat à afficher.  Cliquez sur le bouton ci-dessus pour générer des numéros.
</div>
</BODY>
</HTML>

Conclusion :


Quand je pense qu'il y a des gens assez idiots pour acheter/vendre ce type de programme (qui ne fonctionne pas comme ils le voudraient), alors qu'il suffit d'un peu de code en JavaScript pour y arriver.

Au final, si les autorités sont peu rassurées de ce type de programme, alors c'est que leur système n'est pas aussi sécurisé qu'il ne devrait l'être !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.