A reader for an access control system, comprising: a polling module configured to scan for and read an identification code from a tag; a counting module configured to calculate a read counter value, a poll counter value, and an anti-passback counter value each time the polling module conducts a scan, wherein the anti-passback counter value is set to zero after a first read of the tag, remains zero until the read counter value reaches a predetermined maximum read counter value after which point the anti-passback counter value is assigned a predetermined nonzero value which is decremented with each scan until reaching zero, wherein the anti-passback counter value is reset to the predetermined nonzero value every time the identification code is read as long as said anti-passback counter value has not reached zero, wherein the read counter value is incremented when the polling module reads the identification code, and wherein the poll counter value is decremented from an initial nonzero value each time the polling module scans for the identification code, but only if the anti-passback counter value is equal to zero; a database module configured to store the identification code read by the polling module, and further configured to store the read counter value, the poll counter value, and the anti-passback counter value, wherein the database module purges the counter values and the stored identification code when the anti-passback counter value reaches zero after being decremented; and a reporting module configured to transmit the identification code obtained from the tag to an access control panel when the read counter value reaches the predetermined maximum read counter value. a polling module configured to scan for and read an identification code from a tag; a counting module configured to calculate a read counter value, a poll counter value, and an anti-passback counter value each time the polling module conducts a scan, wherein the anti-passback counter value is set to zero after a first read of the tag, remains zero until the read counter value reaches a predetermined maximum read counter value after which point the anti-passback counter value is assigned a predetermined nonzero value which is decremented with each scan until reaching zero, wherein the anti-passback counter value is reset to the predetermined nonzero value every time the identification code is read as long as said anti-passback counter value has not reached zero, wherein the read counter value is incremented when the polling module reads the identification code, and wherein the poll counter value is decremented from an initial nonzero value each time the polling module scans for the identification code, but only if the anti-passback counter value is equal to zero; a database module configured to store the identification code read by the polling module, and further configured to store the read counter value, the poll counter value, and the anti-passback counter value, wherein the database module purges the counter values and the stored identification code when the anti-passback counter value reaches zero after being decremented; and a reporting module configured to transmit the identification code obtained from the tag to an access control panel when the read counter value reaches the predetermined maximum read counter value.