PostgreSQLで固有の乱数を13桁の固定長で生成する必要があります。 "pseudo_encrypt"を使用して暗号化されたシーケンスが使用されたのと同じようなthreadが見つかりましたが、返された数字は固定長ではありませんでした。Postgresqlで一意の乱数を固定長で生成する
だから、私は必要なものである:最小値が0000000000001で、最大値は9999999999999.
ことが可能です13桁の固定長で暗号化された乱数列を取得しますか?正面のゼロで始めることができないのは大きな問題ではない(私は思う)、私はそれらをプログラムからdbから読み込む間に設定できるが、PostgreSQLが単独でそれを行うことができるならば素晴らしいだろう。
は、私はPostgreSQLでユニークな乱数(BIGINT)を生成する必要があります。
- - EDIT
私は私が必要なものをよりよく説明するために質問を変更しなければならないいくつかの有用なものを実現していた後、 13桁の固定長です。実際には私はpseudo_encrypt関数(64ビット)を使用しようとしていますが、返された数は明らかに固定長さ13、32ビットの場合、最大長は10桁(int)であり、64ビットは19(bigint)。
最小値が1で最大値が9999999999999の固定長さが13桁の暗号化ランダムシーケンスを取得するにはどうすればよいですか?
この結果を得るには、64ビットpseudo_ecrypt関数を変更することはできますか?あるいは、可能でない場合は、この要件を備えたユニークなシーケンスを得る他の方法がありますか?
擬似暗号化機能(64)Nの既存の機能を微調整
CREATE OR REPLACE FUNCTION pseudo_encrypt(VALUE bigint) returns bigint AS $$
DECLARE
l1 bigint;
l2 bigint;
r1 bigint;
r2 bigint;
i int:=0;
BEGIN
l1:= (VALUE >> 32) & 4294967295::bigint;
r1:= VALUE & 4294967295;
WHILE i < 3 LOOP
l2 := r1;
r2 := l1 # ((((1366.0 * r1 + 150889) % 714025)/714025.0) * 32767*32767)::int;
l1 := l2;
r1 := r2;
i := i + 1;
END LOOP;
RETURN ((l1::bigint << 32) + r1);
END;
$$ LANGUAGE plpgsql strict immutable;
'to_char(pseudo_encrypt(nextval( 'seq'):: int)、 '0000000000000')' –
シーケンスはどうなっていますか?どのように私はそれを設定する必要がありますか? – MattC
リンク先の質問と同じです。最大値が13桁を超えないようにしてください。 –