Es sencillo, crea una tabla en tu BD, donde guardes el PIN, y la fecha de vencimiento, luego mediante un Query puedes saber si ya venció usando algo así:
Código:
SELECT `pin` FROM `pines` WHERE DATEDIFF( `fecha_vencimiento`, CURDATE() ) <= 0
Si ese código te devuelve el PIN es que todavía no vence, si no te devuelve filas es que ya venció.
Para generar tu PIN puedes usar la función rand().
Saludos.