Patent ID: 8890659

Claim:
A method for preventing collision of tags in a radio frequency identification (RFID) system comprising: a reader beginning to inventory tags and waiting for replies of the tags; setting counters for the tags, an initial value of each counter being 0, and all the tags beginning to reply; if replies of the tags collide, splitting the tags into two subsets, the tags in one of the subsets replying to the reader, and when inventory of the tags in the subset is completed, the tags in the other subset beginning to reply; if collision occurs during the replying by the tags in the subset, the subset splitting again, and so forth, till inventory of all the tags is completed; and during splitting of the tags in the subsets, performing simultaneous splitting of a plurality of branches of tags at least once; during inventory of the tags, if the reader receives collision error information from the tags in a specified timeslot, then sending a failure acknowledgement instruction to the tags, and entering a next timeslot for reception; when the tags receive the failure acknowledgement instruction, the branches of the tags whose counter values satisfy a specified splitting rule performing splitting, each branch splitting into two branches, and modifying each counter value, in modification, ensuring that an order of the counter values is consistent with an order of the replying by the tags, then the tag whose counter value is 0 replying to the reader; adding m parameters brand[1], brand[2], . . . , brand[1] in the failure acknowledgement instruction, wherein if i<j, brand[i]<brand[j], and brand[j] is always 0; and when the tags receive the failure acknowledgement instruction, the tag whose counter value n is equal to any of the m parameters participating in the splitting process, assuming n=brand[i], 1≦i≦m; starting a randomizer, for the tag with random number 0 generated, modifying the counter value to n+i−1; for the tag with random number 1 generated, modifying the counter value to n+i; and for the tag whose counter value n is different from each of the m parameters, modifying the counter value to n+m if n>brand[m], otherwise modifying the counter value to n+i if brand[i]<n<brand[i+1].