Files
bl/help/随机id生成

42 lines
890 B
Go
Raw Normal View History

2026-03-01 01:08:43 +08:00
-- 先恢复
ALTER TABLE base_sys_user
ALTER COLUMN id SET DEFAULT nextval('base_sys_user_id_seq');
DROP FUNCTION IF EXISTS next_8digit_shuffle_id() CASCADE;
-- 8位自增 洗牌 仍然8位 绝对不重复
CREATE OR REPLACE FUNCTION next_8digit_shuffle_id()
RETURNS bigint
LANGUAGE plpgsql
VOLATILE
AS $$
2026-03-01 00:27:08 +08:00
DECLARE
2026-03-01 01:08:43 +08:00
seq bigint;
a int;
b int;
2026-03-01 00:27:08 +08:00
BEGIN
2026-03-01 01:08:43 +08:00
seq := nextval('base_sys_user_id_seq');
-- 8 位数字拆开洗牌
a := (seq / 10000)::int; -- 前4位
b := (seq % 10000)::int; -- 后4位
-- 前后互换 + 简单扰乱保证
-- 1. 还是8位
-- 2. seq 不同 结果一定不同
return ((b * 9871) % 10000) * 10000
+ ((a * 1237) % 10000);
2026-03-01 00:27:08 +08:00
END;
2026-03-01 01:08:43 +08:00
$$;
2026-03-01 00:27:08 +08:00
2026-03-01 01:08:43 +08:00
-- 启用
2026-03-01 00:27:08 +08:00
ALTER TABLE base_sys_user
2026-03-01 01:08:43 +08:00
ALTER COLUMN id SET DEFAULT next_8digit_shuffle_id();
2026-03-01 00:27:08 +08:00
ALTER TABLE base_sys_user
ALTER COLUMN id
SET DEFAULT nextval('base_sys_user_id_seq');