A method comprising: receiving, by a server computer (104; 610), a request message comprising at least a credential from a client device (102; 608); hashing, by the server computer (104; 610), the credential to form an altered credential value; determining, by the server computer (104; 610), whether or not the altered credential value matches one of a number of hashed values stored in a database; if the altered credential value matches a matched hashed value, determining, by the server computer (104; 610), a range of a plurality of ranges, the range being associated with the matched hashed value; determining, by the server computer (104; 610), a data item associated with the range; and providing, by the server computer (104; 610), the data item to the client device (102; 608), wherein the method further comprises, prior to receiving the request message: generating, by the server computer (104; 610), the plurality of ranges, each range including a lower limit and an upper limit; and for each range of the plurality of ranges: expanding, by the server computer (104; 610), the lower limit and the upper limit of the range into a plurality of values; removing, by the server computer (104; 610), one or more values of the plurality of values based on a predetermined criteria; hashing, by the server computer (104; 610), the plurality of values that were not removed to form a plurality of hashed values; and storing, by the server computer (104; 610), the hashed plurality of values into the database, wherein each hashed value is indexed to the range. receiving, by a server computer (104; 610), a request message comprising at least a credential from a client device (102; 608); hashing, by the server computer (104; 610), the credential to form an altered credential value; determining, by the server computer (104; 610), whether or not the altered credential value matches one of a number of hashed values stored in a database; if the altered credential value matches a matched hashed value, determining, by the server computer (104; 610), a range of a plurality of ranges, the range being associated with the matched hashed value; determining, by the server computer (104; 610), a data item associated with the range; and providing, by the server computer (104; 610), the data item to the client device (102; 608), wherein the method further comprises, prior to receiving the request message: generating, by the server computer (104; 610), the plurality of ranges, each range including a lower limit and an upper limit; and for each range of the plurality of ranges: expanding, by the server computer (104; 610), the lower limit and the upper limit of the range into a plurality of values; removing, by the server computer (104; 610), one or more values of the plurality of values based on a predetermined criteria; hashing, by the server computer (104; 610), the plurality of values that were not removed to form a plurality of hashed values; and storing, by the server computer (104; 610), the hashed plurality of values into the database, wherein each hashed value is indexed to the range. expanding, by the server computer (104; 610), the lower limit and the upper limit of the range into a plurality of values; removing, by the server computer (104; 610), one or more values of the plurality of values based on a predetermined criteria; hashing, by the server computer (104; 610), the plurality of values that were not removed to form a plurality of hashed values; and storing, by the server computer (104; 610), the hashed plurality of values into the database, wherein each hashed value is indexed to the range.