gehen tun tät's schon, aber es ist aufwendiger
Codes generieren und validieren
Einklappen
X
-
Ja, aber im endeffekt leichter für micH =) (Net immer codes reinhaun usw usw usw ) ;D Und die db muss nicht so leiden ^-^
Hättest du eine idee, wie ich das da rausbekomme!?
Habe reguläre ausdrücke momentan nua für email usw benutzt aber noch nie für sowas Oo
//edit
Okay ein Bisschen hab ich ja schon zum überprüfen ob zumindestens nur Zahlen und Buchstaben sind und - vorhanden sind und ob jedes nur 4 Ziffern sind ^-^
PHP-Code:<?php
$code = "KSDF-8S6T-R34R-FC4G";
$code2 = preg_match("/^([A-Z0-9]{4})-([A-Z0-9]{4}+)-([A-Z0-9]{4}+)-([A-Z0-9]{4})$/si", $code);
echo $code2;
?>Zuletzt geändert von MasterRed; 24.12.2004, 12:33.
Kommentar
-
die sicherheit hängt dann aber davon ab, dass niemand den algorithmus in die finger bekommt
ein möglicher ansatz wäre (is ja schließlich weihnachtszeit):PHP-Code:define('CONST_a', 94); define('CONST_b', 9); define('CONST_c', 67);
define('CONST_d', 88); define('CONST_e', 79); define('CONST_f', 12);
define('CONST_g', 19); define('CONST_h', 73); define('CONST_i', 60);
define('CONST_j', 68); define('CONST_k', 47); define('CONST_l', 39);
define('CONST_m', 90); define('CONST_n', 101); define('CONST_o', 111);
define('CONST_p', 55); define('CONST_q', 72); define('CONST_r', 14);
define('CONST_s', 122); define('CONST_t', 95); define('CONST_u', 98);
define('CONST_v', 20); define('CONST_w', 125); define('CONST_x', 23);
define('CONST_y', 110); define('CONST_z', 87); define('CONST_A', 26);
define('CONST_B', 72); define('CONST_C', 33); define('CONST_D', 35);
define('CONST_E', 105); define('CONST_F', 117); define('CONST_G', 42);
define('CONST_H', 112); define('CONST_I', 33); define('CONST_J', 71);
define('CONST_K', 90); define('CONST_L', 123); define('CONST_M', 119);
define('CONST_N', 85); define('CONST_O', 81); define('CONST_P', 84);
define('CONST_Q', 18); define('CONST_R', 77); define('CONST_S', 76);
define('CONST_T', 57); define('CONST_U', 12); define('CONST_V', 116);
define('CONST_W', 86); define('CONST_X', 50); define('CONST_Y', 82);
define('CONST_Z', 128); define('CONST_0', 22); define('CONST_1', 14);
define('CONST_2', 20); define('CONST_3', 124); define('CONST_4', 17);
define('CONST_5', 89); define('CONST_6', 113); define('CONST_7', 22);
define('CONST_8', 64); define('CONST_9', 69);
define('VALUES', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');
function generate_code($blocks = 4) {
$block = '____-';
$result = substr(str_repeat($block, $blocks), 0, -1);
$length = 5 * $blocks;
$values = VALUES;
for ($i = 0; $i < $length; $i++)
if (($i + 1) % 5)
$result{$i} = $values{mt_rand(0, strlen(VALUES) - 1)};
$result = explode('-', $result);
$consts = get_defined_constants();
$overall = 0;
foreach ($result as $key => $r) {
$check = $consts['CONST_'.$r{0}];
$check *= $consts['CONST_'.$r{1}];
$check += $consts['CONST_'.$r{2}];
$r{3} = $check % 10;
$overall += $check + $r{3};
$r .= $values{mt_rand(0, strlen(VALUES) - 1)};
$result[$key] = $r;
}
return implode('-', $result).($overall % 10);
}
function valid($code) {
$parts = explode('-', $code);
$consts = get_defined_constants();
$overall = 0;
foreach($parts as $part) {
$check = $consts['CONST_'.$part{0}];
$check *= $consts['CONST_'.$part{1}];
$check += $consts['CONST_'.$part{2}];
$overall += $check + ($check % 10);
if ($part{3} != $check % 10)
return false;
}
return (($overall % 10) == $code{strlen($code) - 1});
}
$values = VALUES;
for($i = 2; $i < 8; $i++) {
$code = generate_code($i);
echo $code.': '.(int)valid($code);
echo '<br />';
}
Es werden x Blöcke mit je 5 Zeichen genereriert. Das vierte Zeichen ist die Prüfsumme der 3 vorhergehenden, das 5 Zeichen hat keinerlei Bedeutung, mit Ausnahme des letzten zeichens: Das ist die Prüfsumme über alle BlöckeIch denke, also bin ich. - Einige sind trotzdem...
Kommentar
Kommentar