लेता है मैं एक ऐसे सिस्टम पर काम कर रहा हूं जो उत्तर # 2 here में यादृच्छिक आईडी उत्पन्न करता है।pseudo_encrypt() plpgsql में फ़ंक्शन जो बिगिन
मेरी समस्या यह है कि उल्लिखित pseudo_encrypt() फ़ंक्शन अंतर्निहित नहीं है। मैंने इसे फिर से लिखने की कोशिश की लेकिन यह हमेशा एक ही परिणाम देता है:
CREATE OR REPLACE FUNCTION pseudo_encrypt(VALUE bigint) returns bigint AS $$
DECLARE
l1 bigint;
l2 int;
r1 bigint;
r2 int;
i int:=0;
BEGIN
l1:= (VALUE >> 32) & 4294967296::bigint;
r1:= VALUE & 4294967296;
WHILE i < 3 LOOP
l2 := r1;
r2 := l1 # ((((1366.0 * r1 + 150889) % 714025)/714025.0) * 32767)::int;
l1 := l2;
r1 := r2;
i := i + 1;
END LOOP;
RETURN ((l1::bigint << 32) + r1);
END;
$$ LANGUAGE plpgsql strict immutable;
क्या कोई इसे जांच सकता है?
आह bitmask एक मूर्ख गलती थी ... तुम बहुत धन्यवाद बहुत! पूरी तरह से काम करता है! बीटीडब्ल्यू: आप बिगिन का सुझाव देना चाहते थे, int नहीं। –
@ डैनियल वेरेट मुझे फक्शन में क्या संशोधित करना है यदि मुझे 13 अंकों की अधिकतम लंबाई के साथ एक बड़ा अंतर चाहिए? – MattC
@ मैटसी: यह गैर-तुच्छ है, आप इसे एक नए प्रश्न के रूप में सबमिट कर सकते हैं। इसके अलावा इस तकनीक के साथ ऊपरी सीमा '2^एन' होने जा रही है जहां 'एन' एक संख्या भी है, न कि' 10^एन'। –