select setval('base_sys_user_id_seq', 10000000, false);


-- 清理旧函数
ALTER TABLE base_sys_user
ALTER COLUMN id SET DEFAULT nextval('base_sys_user_id_seq');

DROP FUNCTION IF EXISTS shuffle_8digit() CASCADE;

-- 8位自增 → 纯数字位置互换 → 依旧8位 → 100%不重复
CREATE OR REPLACE FUNCTION shuffle_8digit()
RETURNS bigint
LANGUAGE plpgsql
VOLATILE
AS $$
DECLARE
  seq  bigint;
    d0 int; d1 int; d2 int; d3 int;
      d4 int; d5 int; d6 int; d7 int;
      BEGIN
        seq := nextval('base_sys_user_id_seq'); -- 原本就是8位

          -- 把 8 位数字拆出来：d7 d6 d5 d4 d3 d2 d1 d0
            d7 := (seq / 10000000) % 10;
              d6 := (seq / 1000000) % 10;
                d5 := (seq / 100000) % 10;
                  d4 := (seq / 10000) % 10;
                    d3 := (seq / 1000) % 10;
                      d2 := (seq / 100) % 10;
                        d1 := (seq / 10) % 10;
                          d0 := seq % 10;

                            -- 固定位置互换（一对一置换，绝对不重复）
                              RETURN
                                   d3*10000000 +
                                        d7*1000000 +
                                             d1*100000 +
                                                  d5*10000 +
                                                       d2*1000 +
                                                            d6*100 +
                                                                 d0*10 +
                                                                      d4;
                                                                      END;
                                                                      $$;

                                                                      -- 启用
                                                                      ALTER TABLE base_sys_user
                                                                      ALTER COLUMN id SET DEFAULT shuffle_8digit();
                                                                      