希望有人能幫助我。可重複生成有限制的個人ID
我想生成一個個人ID。餘有 - 由於的Moodle的插件 - 的folwowing限制:
- 的ID必須不大於9
- 更長的ID必須只containe數字[0-9]
的ID不應該是一個隨機數字。如果可能的話,我希望能夠通過該人的一些基本信息重新創建它。
我的方法:
此刻我執行以下步驟來生成ID。
1)我把主鍵,名字和姓氏,做一個MD5散列。
USE `bpmspace_coms_v1`;
DELIMITER //
DROP PROCEDURE IF EXISTS demo_data;
//
CREATE PROCEDURE demo_data()
begin
DECLARE x SMALLINT DEFAULT 0;
while x < 100
do
SET @lastname = generate_lname();
SET @firstname = generate_fname();
INSERT INTO .`coms_participant` (`coms_participant_lastname`, `coms_participant_firstname`, `coms_participant_public`, `coms_participant_placeofbirth`, `coms_participant_birthcountry`) VALUES (@lastname, @firstname, '0', str_random('Cccc(4)'), str_random('Cccc(7)'));
SET @lastid = LAST_INSERT_ID();
INSERT INTO `coms_participant_identifier` (`coms_participant_id`, `coms_participant_matriculation`, `coms_participant_md5`) VALUES (@lastid, @lastid, md5(concat(@lastid,@firstname,@lastname)));
set x = x+1;
end while;
END;
//
DELIMITER ;
call demo_data()
2)然後我剪頭7個hexvalues(FFFFFFF = 268.435.455),並將其轉換爲數字
UPDATE `coms_participant_identifier` set `coms_participant_matriculation` = CONV(SUBSTRING(coms_participant_md5,1,7),16,10) where true;
有沒有更好的辦法?你什麼時候碰到碰撞?
感謝您的幫助,
羅布
這裏有2代表的創建語句涉及
CREATE TABLE `coms_participant` (
`coms_participant_id` int(11) NOT NULL AUTO_INCREMENT,
`coms_participant_lastname` varchar(60) DEFAULT NULL,
`coms_participant_firstname` varchar(60) DEFAULT NULL,
`coms_participant_public` tinyint(4) DEFAULT '0',
`coms_participant_placeofbirth` varchar(60) DEFAULT NULL,
`coms_participant_birthcountry` varchar(60) DEFAULT NULL,
`coms_participant_dateofbirth` date DEFAULT NULL,
`coms_participant_LIAM_id` int(11) NOT NULL,
PRIMARY KEY (`coms_participant_id`)
) ENGINE=InnoDB AUTO_INCREMENT=52807563 DEFAULT CHARSET=utf8;
CREATE TABLE `coms_participant_identifier` (
`coms_participant_identifier_id` int(11) NOT NULL AUTO_INCREMENT,
`coms_participant_id` int(11) NOT NULL,
`coms_participant_matriculation` double NOT NULL,
`coms_participant_md5` varchar(32) DEFAULT NULL,
PRIMARY KEY (`coms_participant_identifier_id`),
UNIQUE KEY `coms_participant_identifier_id_UNIQUE` (`coms_participant_identifier_id`)
) ENGINE=InnoDB AUTO_INCREMENT=229583147 DEFAULT CHARSET=utf8;
我使用https://thecodecave.com/tag/mysql/ 和str_random(generate_lname()generate_fname())從http://moinne.com/blog/ronald/mysql/howto-generate-meaningful-test-data-using-a-mysql-function
「*我希望能夠與人的一些基本的相關信息重新創建它。*」我問的第一個問題是:爲什麼?這似乎是一個奇特的特徵。 「*由於Moodle的插件[我有]以下限制*」你確定嗎?也許你應該問一個關於這個限制的問題。 – Schwern